Параметры прослушивания дубликата Nginx для ошибки [::]: 80

12

Когда я запускаю команду для проверки моей конфигурации, я получаю сообщение об ошибке, в котором говорится о наличии нескольких дубликатов [::]: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. Есть идеи, в чем может быть проблема?

ztmcoder
источник
Пожалуйста, оставьте сообщение об ошибке ( nginx -tвыход). Какую версию nginx вы используете? ipv6only=onможет не понадобиться больше. У меня есть это в моем блоке сервера: listen 80;listen [::]:80;и он работает нормально. У вас есть другие серверные блоки?
simlev
Это сработало, что вы предложили Спасибо! Никогда бы не подумал об этом.
ztmcoder

Ответы:

27

Я создаю ответ из моего предыдущего комментария.

Пожалуйста, опубликуйте сообщение об ошибке ( 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.

simlev
источник