Nginx 子域名的服务器名称冲突

Nginx 子域名的服务器名称冲突

我目前在 Nginx 上为 foo.domain.com 运行一个 vhost,并且一切运行良好。

我为要添加的新子域名 bar.domain.com 创建了一个新文件。我对两者使用相同的设置。

当我重新启动 Nginx 时我得到

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

当我访问 bar.domain.com 时,我看到了我应该看到的内容,但是当我访问 foo.domain.com 时,我看到了 bar.domain.com 链接到的页面。

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

酒吧

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

我哪里做错了?

答案1

在我看来你的 https 块也需要指定服务器名称,例如

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}

答案2

您可能还拥有/etc/nginx/sites-available/<site-name>链接到的其他文件/etc/nginx/sites-enabled/<site-name>

这些文件中的设置可能与/etc/nginx/sites-available/default文件冲突

答案3

当我意外地重复服务器名称时,我遇到了类似的问题:

server_name myserver.example.com myserver.example.com;

通过将其更改为:来修复

server_name myserver.example.com;

答案4

出现此问题的另一个可能原因是:使用 certbot 从 Let's Encrypt 获取证书时生成的附加服务器块。

事实证明,每次运行 certbot 都会向我的 nginx 配置文件添加一些服务器块,这些条目可通过注释“由 certbot 管理”识别。这些额外的块正在处理例如 http 到 https 的重定向。它们暂时不会让 nginx 担心,但当我通过 /sites-available 为子域添加另一个服务器块时,这些“冲突的服务器名称”警告确实弹出。

相关内容