同一Nginx服务器配置双域名SSL出现[::]:443监听选项重复问题
我来帮你搞定这个Nginx的重复监听问题!你遇到的错误是因为两个配置文件(或者同一个文件被加载了两次)里对IPv6的443端口设置了重复的监听选项,导致Nginx启动冲突。咱们一步步来解决:
1. 先排查配置文件是否被重复加载
首先看看sites-enabled目录下的软链接情况,有时候会不小心把同一个配置文件重复链接,或者主配置里同时加载了sites-available和sites-enabled目录,导致同一个文件被读取两次。
执行这条命令查看详情:
ls -l /etc/nginx/sites-enabled/
如果看到hello.com的软链接指向../sites-available/hello.com,同时还有其他指向同一个文件的链接,或者你发现nginx.conf里同时写了包含sites-available/*和sites-enabled/*,那就是重复加载的问题了——通常我们只需要加载sites-enabled里的软链接就行,sites-available作为备份目录不用直接包含。
2. 统一所有443端口的监听参数
Nginx有个严格要求:所有监听同一个端口的server块,listen指令的参数必须完全一致。比如一个配置里写了listen [::]:443 ssl http2;,另一个只写了listen [::]:443 ssl;,就会触发这个重复选项的错误。
你需要把两个域名配置里的443监听改成完全一致的格式,比如统一写成:
listen 443 ssl http2; listen [::]:443 ssl http2;
这样不管是IPv4还是IPv6的443端口,参数都完全匹配,就不会冲突了。
3. 清理重复的配置引用
如果刚才检查发现nginx.conf里同时包含了sites-available和sites-enabled,赶紧修改成只包含sites-enabled:
打开/etc/nginx/nginx.conf,找到include相关的行,改成:
include /etc/nginx/sites-enabled/*;
然后删掉sites-enabled里多余的软链接(如果有的话)。
4. 验证配置并重启Nginx
改完之后,先测试配置是否合法:
nginx -t
如果输出显示test is successful,那就可以重启Nginx让配置生效了:
systemctl restart nginx
小提醒
另外别忘了确认两个Web应用的proxy_pass指向的端口是正确的(比如一个是4000,另一个是其他端口),还有server_name要准确对应各自的域名,别搞混了哦。
内容的提问来源于stack exchange,提问作者Martin Brandhaug

