2016-09-15 119 views
0

在Nginx服务器上访问一个网站,IP地址上有多个域名/网站/应用,没有默认服务器/ conf,会打开第一个字母域在那个IP上。Nginx使用IP访问多个域,没有默认服务器/ conf

这是TRUE还是FALSE?

如果为TRUE,可以以某种方式覆盖它吗?

+0

错误。如果将IP传递给Nginx而不是域名,则它将落入默认服务器块。如果没有指定默认的服务器块,则会落入配置中的第一个匹配块。总之,你应该总是指定一个默认的服务器块。 –

+0

是的,我没有默认的服务器块....这个报价是我感兴趣的:“它会下降到第一个匹配块”哪一个是第一个?我认为它按字母顺序排列 – lewis4u

回答

2

假。因为取决于你的配置。

在按名称搜索虚拟服务器,如果名称匹配 多于一个指定的变体,(例如两个通配符名称 和正则表达式匹配),第一匹配变体将被 选择,按优先顺序如下:

  1. 确切名称

  2. 最长的通配符名称以星号,如 “* .example.com”

  3. 以星号结尾的最长通配符名称,例如, “邮件。*”

  4. 第一匹配正则表达式(在 配置文件中出现的顺序)

如果没有发现匹配,则nginx的意愿请求路由到默认的服务器为这个港口。 默认服务器是您的配置文件中的第一个 - 这是nginx的标准默认行为。如果包含使用include指令的所有服务器都带有掩码 - 包含文件按字母顺序排序(按文件名称,而不是server_name中的域名称)。

默认服务器也可以明确地设置该服务器应该是默认情况下,在listen指令的default_server参数。

此外,如果您需要通过IP和未知域名访问服务器的不同行为,您可以添加IP地址为server_name的名称。

UPD:在通过IP访问nginx的情况下 - 主机名将等于IP。因此,nginx将开始查找与IP主机名匹配的server_name。上述所有内容仍然有效。

+0

对不起,但你把所有事实都命名为如果我想使用域名访问服务器(如:domain_name.com),但我想访问它与IP地址....它都是本地的,这就是为什么我不能得到它的域名....我知道所有的选择如何得到它...(我可以编辑一个主机文件,并把域名和IP,我可以把这个域名作为这个服务器上的单个域名,或者我可以将它设置为默认服务器),但问题仍然存在:如果您访问IP为192.168 .0.50如果有多个域,并且没有默认域,那么哪个域将被打开 – lewis4u

+0

通过IP访问,与通过域名访问相同。我这种情况下的主机名将等于IP。因此,nginx将开始查找与192.168.0.50主机名匹配的server_name。在没有server_name匹配的情况下nginx的行为 - 在我的回答中描述:) –

+0

写得太多....只有这一点很重要:如果通过ip访问服务器并且没有配置默认服务器,则所有域配置都“按字母顺序排序(通过文件的名称,而不是server_name中的域的名称)“ – lewis4u