Назад | Перейти на главную страницу

Параметры дублирования прослушивания 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. Есть идеи, в чем может быть проблема?

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

Отправьте сообщение об ошибке (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.