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_server
在listen
指令中声明,要么是第一个。
答案2
您尚未分享完整的 nginx 配置,因此这只是对配置中缺少内容的猜测。
nginx 总是为每个请求提供某些服务。如果没有与请求server
匹配的块,nginx 将使用默认块。server_name
server
默认块可以是指令具有修饰符的server
块。listen
default_server
如果不存在这样的块,则第一个server
块是默认的。
对于您来说,我认为您需要设置一个这样的默认服务器块:
server {
listen 80 default_server;
return 444; # breaks connection. Can be 404 if you want to return HTTP 404 not found
}