nginx 不尊重 server_name 值

nginx 不尊重 server_name 值
server{
    ..
    server_name some_other_domain_name.com;
    ..
}

我已经通过 godaddy 将我的域名映射到我的 VM 的公共 IP。

当我在浏览器中输入域名时,它就可以访问虚拟机上托管的网站(通过 nginx)。但是,我预计 nginx 不会允许该请求,因为 server_name 属性设置为 some_other_domain_name.com

nginx 不检查 server_name 属性吗?

答案1

Digital Ocean 上有一篇很好的文章解释了 nginx 如何选择服务器和位置块来处理请求了解 Nginx 服务器和位置块选择算法

简而言之,nginx 首先根据listen指令选择最佳匹配。并且仅检查server_name是否存在多个匹配。在这种情况下,如果没有server_name匹配,它将选择default块。默认块要么default_serverlisten指令中声明,要么是第一个。

答案2

您尚未分享完整的 nginx 配置,因此这只是对配置中缺少内容的猜测。

nginx 总是为每个请求提供某些服务。如果没有与请求server匹配的块,nginx 将使用默认块。server_nameserver

默认块可以是指令具有修饰符的server块。listendefault_server

如果不存在这样的块,则第一个server块是默认的。

对于您来说,我认为您需要设置一个这样的默认服务器块:

server {
    listen 80 default_server;
    return 444; # breaks connection. Can be 404 if you want to return HTTP 404 not found
}

相关内容