【问题标题】:Nginx accessing multiple domains with IP without default server/confNginx 使用 IP 访问多个域,无需默认 server/conf
【发布时间】:2017-01-23 05:37:53
【问题描述】:

使用 IP 地址访问 Nginx 服务器上的网站,该 IP 地址提供多个域名/网站/应用程序并且没有默认服务器/conf,将打开该 IP 上的第一个字母域。

这是对还是错?

如果为 TRUE,是否可以以某种方式覆盖?

【问题讨论】:

  • 错误。如果将IP而不是域名传递给Nginx,它将落入默认服务器块。如果未指定默认服务器块,它将落入配置中的第一个匹配块。简而言之,您应该始终指定一个默认服务器块。
  • 是的,我没有默认服务器块....这句话是我感兴趣的:“它将落到第一个匹配块”哪个是第一个? ??我认为它是按字母顺序排列的
  • 啊,我明白了……好点子。我建议您指定一个默认服务器块。如需更多说明,请参阅here

标签: nginx server ip domain-name


【解决方案1】:

错误。因为取决于你的配置。

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

  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。上述所有内容仍然有效。

【讨论】:

  • 对不起,你命名了所有的事实,比如如果我想用域名访问服务器(例如:domain_name.com)但我想用 IP 地址访问它......就是这样本地的,这就是我无法使用域名获取它的原因....我知道如何获取它的所有选项...(我可以编辑主机文件并输入域名和 IP,我可以制作此域名作为此服务器上的单个域,或者我可以将其设置为默认服务器)但问题仍然存在:如果您访问 IP 为 192.168.0.50 的服务器,如果有多个域并且有没有默认
  • IP访问与域名访问相同。在这种情况下,主机名将等于 IP。因此,nginx 将开始查找与 192.168.0.50 主机名匹配的 server_name。在没有匹配 server_name 的情况下 nginx 的行为 - 在我的回答中描述:)
  • 写得太多....只有这一点很重要:如果通过 ip 访问服务器并且没有配置默认服务器,则所有域配置都“按字母顺序排序(按文件名,而不是域名)在 server_name)"
  • 提示:仅当通过 ONE include * 包含 ALL 服务器块时才正确。你还问过如何改变这种行为,这就是为什么这么多文字:)
猜你喜欢
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2020-10-19
  • 2013-06-07
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多