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


41

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

Answers:


52

服务器名称 _; 和listen_config上的default_server是您要寻找的。

例:

server {

   listen 80 default_server;
   server_name _;

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

}

1
对于https案:listen 443 ssl default_server;
James T Snell

启用此功能后,我owncloud 9将不会响应。为什么?Owncloud VHOST具有server_name,并且不是default_server。
科尼

我不只用80443打开。
科尼

如果添加此选项,则/ etc / nginx / sites-enabled /中的其他配置片段将被忽略。/var/www/default在这种情况下,所有域都转到。我该如何订购代码片段?
rubo77 '18

我可以创建一个到PostgreSQL连接的VHO吗?
埃隆·查尔斯

4

如果使用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将断开连接。它不会尝试其他服务器。因此,请不要忘记证书/密钥。


关于SSL证书的重要说明!如果证书丢失,则整个nginx服务器将无法运行(即使nginx -t说“确定”)
Philipp

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;以避免为找不到的页面添加日志条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.