我目前在 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 为子域添加另一个服务器块时,这些“冲突的服务器名称”警告确实弹出。