Options d'écoute en double Nginx pour [::]: erreur 80

12

Lorsque j'exécute la commande pour tester ma configuration, j'obtiens une erreur indiquant qu'il existe plusieurs doublons pour [::]:80. Avant cela, j'ai eu un problème avec plusieurs serveurs par défaut en double.

Quand j'ai eu le problème avec plusieurs serveurs par défaut, mon fichier ressemblait à ceci

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;
    }
}

Pour résoudre ce problème, j'ai changé la configuration en:

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;
    }
}

Après le changement, j'ai commencé à obtenir une erreur "Options en double pour [::]: 80". Je ne sais pas ce que je fais mal avec cela. C'est la première fois que je travaille avec Nginx. Des idées sur le problème?

ztmcoder
la source
Veuillez poster le message d'erreur ( nginx -tsortie). Quelle version de nginx utilisez-vous? ipv6only=onpourrait ne plus être nécessaire. J'ai ceci dans mon bloc serveur: listen 80;listen [::]:80;et ça fonctionne bien. Avez-vous d'autres blocs serveur?
simlev
Cela a fonctionné ce que vous avez suggéré Merci! Je n'aurais jamais pensé à ça.
ztmcoder

Réponses:

27

Je crée une réponse à partir de mon commentaire précédent.

Veuillez poster le message d'erreur ( nginx -tsortie) car il pourrait contenir des informations utiles.

Quelle version de nginx utilisez-vous? L'option ipv6only=onpourrait ne plus être nécessaire et au contraire potentiellement créer des problèmes. J'ai ceci dans mon bloc serveur et ça fonctionne bien:

listen 80;
listen [::]:80;

Avez-vous d'autres blocs serveur que vous n'avez pas publiés qui pourraient éventuellement entrer en conflit les uns avec les autres?


Explication: Lisons le courant (1,13) nginx documentation :

ipv6only=on|off
ce paramètre (0.7.42) détermine (via l' IPV6_V6ONLYoption socket) si une socket IPv6 écoutant sur une adresse générique [::] acceptera uniquement les connexions IPv6 ou les connexions IPv6 et IPv4. Ce paramètre est activé par défaut. Il ne peut être réglé qu'une seule fois au démarrage.

Ce paramètre est activé par défaut signifie que vous ne devez pas l'utiliseripv6only=on. Il ne fait aucun bien et peut potentiellement créer des problèmes (voir point suivant).

Il ne peut être réglé une fois signifie que si vous avez plus d'une fois partout dans votre configuration (exemple dans différents blocs de serveur), il renvoie une erreur:nginx: [emerg] duplicate listen options for [::]:80.

simlev
la source