子网域的Nginx伺服器名称冲突


14

我目前在Nginx上为foo.domain.com运行了一个虚拟主机,一切正常。

我为要添加的新子域创建了一个名为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链接到的页面。

oo

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;
}

我要去哪里错了?


您还需要server_name在SSL(443)配置中指定。
zakjan 2015年

如后listen 443在每台服务器上添加server_name [foo/bar].domain.com
RockJake28年

Answers:


9

在我看来,您的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;
}

3

您可能还具有/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;

就我而言,我偶然有两个具有相同虚拟主机server_name。我已经进行了多年的配置,从不担心该错误消息。原来,我错误地启动了一个虚拟主机,该虚拟主机只是模板template
Gwyneth Llewelyn

2

还要检查每个文件中/etc/nginx/conf.d的重复项。

就我而言,nginx -t通过了测试-尝试启动nginx时收到了该错误消息。

我的/etc/nginx/sites-enabled文件没有域(服务器名)重复项,并且只有1个引用server_default(没有localhost重复项)

相反,有两个文件conf.d都引用了特定的域(即,两个文件的行类似:servername mydomain.com,其中两个文件中列出了一个域名)。

我的解决方案: 因此,请确保所有文件conf.d最多仅引用一次任何特定servername(域名)值。


不幸的是,解决了上述问题后,我现在得到:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 尝试重新启动nginx时出现错误消息。)

更新:仅供参考,...:Address already in use上面的错误消息:然后,
我所要做的只是像个魅力! 我在这里找到了答案:https : //easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/sudo fuser -k 80/tcpservice nginx restart

update2
有人建议另一个进程正在使用端口80(这就是为什么杀死它的原因,并且还使b / c nginx当时没有在运行)。
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

他们还指出,在杀死进程之前,先查看进程可能可以洞悉是什么原因导致了问题。
因此,最好使用以下任一方法:( sudo fuser -k 80/tcp不带-k选项),然后grep为那些进程号使用a。
systemctl list-unit-files输出,可能会提供有关冲突过程的见解

或:
fuser -kivn tcp 80,其中:
-v除进程ID外,还打印进程名称,
-i使其在杀死https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-之前提示
使用中/ 52914/5


0

就我而言,找不到任何重复项。但是,我确实有default.conf,在其中注释了除打开服务器块和关闭括号以外的所有配置...这引起了冲突的错误。

基本上,没有导致问题的原因是没有server_name指令的服务器块,而不是重复的。

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.