- 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 如何处理请求。
就你的情况而言:
blech.somedomain.net
似乎指向的是与sub1.somedomain.net
sub1.somedomain.net
没有比找到的虚拟服务器更适合你的请求的虚拟服务器blech.somedomain.net
,它被选中来为请求提供服务,就像它default_server
在其服务器上有标志一样listen
指示。
如果不想这样,您可以(选项不限于以下列表):
- 对要相互隔离的子域名使用单独的 IP 地址
- 为要捕获的子域名创建虚拟服务器
- 使用另一个虚拟服务器作为
default_server