web-dev-qa-db-fra.com

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

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?

12
ztmcoder

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

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

Quelle version de nginx utilisez-vous? Option ipv6only=on pourrait ne plus être nécessaire et au contraire 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 le IPV6_V6ONLY option socket) si une socket IPv6 écoute sur une adresse générique [::] n'acceptera que 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 utiliser ipv6only=on. Il ne fait aucun bien et peut potentiellement créer des problèmes (voir point suivant).

Il ne peut être défini qu'une seule fois signifie que si vous l'avez plusieurs fois n'importe où dans votre configuration (comme dans différents blocs de serveur), il générera une erreur: nginx: [emerg] duplicate listen options for [::]:80.

25
simlev