Nginx 重复监听选项 [::]:80 错误

Nginx 重复监听选项 [::]:80 错误

当我运行命令来测试我的配置时,我收到一条错误消息,指出有多个重复项[::]:80。在此之前,我遇到了重复多个默认服务器的问题。

当我遇到多个默认服务器的问题时,我的文件如下所示

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.php index.html index.htm;

server_name munki;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
    }

location /report {
    try_files $uri $uri/ =404;
    }

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

location /munki_repo/ {
    alias /usr/local/munki_repo/;
    autoindex off;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

为了解决这个问题,我将配置更改为:

server {
listen 80;
listen [::]:80 ipv6only=on;

root /usr/share/nginx/html;
index index.php index.html index.htm;

server_name munki;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/html;
    }

location /report {
    try_files $uri $uri/ =404;
    }

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

location /munki_repo/ {
    alias /usr/local/munki_repo/;
    autoindex off;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

更改后,我开始收到“[::]:80 的重复选项”错误。我不确定我做错了什么。这是我第一次使用 Nginx。有人知道问题可能出在哪里吗?

答案1

我正在根据我之前的评论创建答案。

请发布错误消息(nginx -t输出),因为它可能包含一些有用的见解。

你运行的是哪个版本的 nginx?选项ipv6only=on可能不再需要,相反可能会产生问题。我的服务器块中有这个,运行良好:

listen 80;
listen [::]:80;

您是否有其他未发布的可能相互冲突的服务器块?


解释:让我们读一下当前的(1.13)nginx文档

ipv6only=on|off
此参数 (0.7.42) 确定(通过IPV6_V6ONLY套接字选项)监听通配符地址的 IPv6 套接字[::] 是否只接受 IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数默认打开。启动时只能设置一次。

此参数默认开启意味着您不应该使用ipv6only=on。它没有任何好处,而且可能会造成问题(请参阅下一点)。

只能设置一次意味着如果你有不止一次任何地方在您的配置中(例如在不同的服务器块中),它将引发错误:nginx: [emerg] duplicate listen options for [::]:80

相关内容