NGINX 在 sub1.domain.tld:port 上监听,会捕获此:port 上所有请求的子域吗?

NGINX 在 sub1.domain.tld:port 上监听,会捕获此:port 上所有请求的子域吗?
  • nginx 版本:nginx/1.9.3(Ubuntu)

我试图弄清楚为什么 NGINX 在 :port 发挥作用时似乎忽略了对硬编码子域的限制,如下所示。 请注意:4444 仅在此块中被监听。

server {
    listen sub1.somedomain.net:4444 ssl;
    include /etc/nginx/sites-available/somedomain.net-lcrypt-config;

    root /var/www/somedomain;
    server_name sub1.somedomain.net;
}

症状是可以在 :4444 上请求任何子域,并且将提供 /var/www/somedomain 服务。

https://blech.somedomain.net

答案1

这与域名无关,而是与定义网络套接字有关:<IP address>:<port>双重套接字。

就您而言,这意味着所有涉及的子域都指向与主域相同的双域。

您配置了 nginx 来监听这个套接字,从而处理那里的任何传入连接。然后,nginx 为请求选择最佳虚拟服务器,如果未找到最佳匹配,则默认为默认服务器。我建议您继续阅读nginx 如何处理请求

就你的情况而言:

  1. blech.somedomain.net似乎指向的是与sub1.somedomain.net
  2. sub1.somedomain.net没有比找到的虚拟服务器更适合你的请求的虚拟服务器blech.somedomain.net,它被选中来为请求提供服务,就像它default_server在其服务器上有标志一样listen指示。

如果不想这样,您可以(选项不限于以下列表):

  • 对要相互隔离的子域名使用单独的 IP 地址
  • 为要捕获的子域名创建虚拟服务器
  • 使用另一个虚拟服务器作为default_server

相关内容