如何在 Nginx 中阻止未定义的 server_name?

Dai*_*ail 6 nginx

我有两个server {}块包含我需要使用的域。

但是我发现了一个问题......如果我配置了另一个指向我服务器的域的DNS,nginx响应正确!为什么?

Nginx 应该响应 http 错误!但它返回具有相同IP地址的网站,为什么?我没有该域的服务器名称!

谢谢!

wom*_*ble 9

它响应是因为您没有配置单独的“默认”虚拟主机。总是有一个默认的或回退的 vhost 配置,以便 nginx 知道在收到您发送的类型的请求时该怎么做。

nginx的文档提供了如何进行服务器名称到虚拟主机匹配一个很好的说明,但总之我建议这样的配置新的虚拟主机:

server {
  listen 80 default_server;
  root /usr/share/empty;
}
Run Code Online (Sandbox Code Playgroud)

/usr/share/empty如果它不存在,您可能需要创建)

这将简单地为使用无法识别的虚拟主机名称访问您的服务器的任何人提供一个空目录。如果您愿意,您可以通过各种错误页面和诸如此类的东西变得更有趣。

  • `root /usr/share/empty;` 可以替换为 `return 404;` (2认同)