设置 Nginx 以捕获所有未处理的虚拟主机

设置 Nginx 以捕获所有未处理的虚拟主机

如果我已经拥有一堆虚拟主机,那么如何创建虚拟主机来处理与任何虚拟主机都不匹配的请求?(即通过 IP 访问、另一个域链接到 IP 等)

答案1

server_name _; 和 listen 配置上的 default_server 就是您要寻找的。

例子:

server {

   listen 80 default_server;
   server_name _;

   root /var/www/default; (or wherever)    

}

答案2

如果您使用 SSL,则需要为 default_server 提供一些额外的管道 - 证书和密钥(可以自签名)。

server {
    server_name _;
    listen 80 default_server;
    listen 443 ssl default_server;
    ssl_certificate <path to cert>;
    ssl_certificate_key <path to key>;
    return 404; # or whatever
}

Nginx 将尝试在 IP/端口匹配的 default_server 上接受 SSL 连接。如果此类服务器缺少证书/密钥,nginx 将断开连接。它不会尝试其他服务器。所以不要忘记证书/密钥。

答案3

server {
  listen 80 default_server;
  listen 443 ssl default_server;
  listen [::]:80 default_server;
  listen [::]:443 ssl default_server;

  server_name _;
  root /path/to/default;
}

这些条目分别用于端口 80(HTTP)、端口 443(HTTPS)、端口 80 IPv6 和端口 443 IPv6。

您可以考虑添加log_not_found off;以避免添加未找到页面的日志条目。

答案4

如果您有listen列出明确 IP 的指令,您还需要在默认块的 listen 指令中包含这些相同的 IP。

server {
    listen 80 default_server;
    listen 10.0.0.10:80 default_server;
    server_name _;
}

server {
    listen 10.0.0.10:80;
    server_name foo.example.com;
}

listen 10.0.0.10:80 default_server如果默认块中没有该指令,即使是您的默认 IP 地址foo.example.com也会被提供服务。http://10.0.0.1010.0.0.10

相关内容