Opções de escuta duplicada do Nginx para o erro [::]: 80

12

Quando executo o comando para testar minha configuração, recebo um erro dizendo que existem várias duplicatas para [::]:80. Antes disso, eu tinha um problema com vários servidores padrão duplicados.

Quando tive o problema com vários servidores padrão, meu arquivo ficou assim

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

Para resolver esse problema, alterei a configuração para:

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

Após a alteração, comecei a receber o erro "opções duplicadas para [::]: 80". Não tenho certeza do que estou fazendo de errado com isso. Esta é minha primeira vez trabalhando com o Nginx. Alguma idéia de qual poderia ser o problema?

ztmcoder
fonte
Por favor, poste a mensagem de erro ( nginx -tsaída). Qual versão do nginx você está executando? ipv6only=onpode não ser mais necessário. Eu tenho isso no meu bloco de servidor: listen 80;listen [::]:80;e funciona bem. Você tem outros blocos de servidor?
simlev
Isso funcionou o que você sugeriu Obrigado! Jamais teria pensado nisso.
Ztmcoder 04/04

Respostas:

27

Estou criando uma resposta do meu comentário anterior.

Poste a mensagem de erro ( nginx -tsaída), pois ela pode conter informações úteis.

Qual versão do nginx você está executando? A opção ipv6only=onpode não ser mais necessária e, pelo contrário, potencialmente criar problemas. Eu tenho isso no meu bloco de servidor e ele funciona bem:

listen 80;
listen [::]:80;

Você tem outros bloqueios de servidor que você não postou que possam entrar em conflito entre si?


Explicação: vamos ler a corrente (1,13) nginx documentação :

ipv6only=on|off
esse parâmetro (0.7.42) determina (por meio da IPV6_V6ONLYopção de soquete) se um soquete IPv6 que escuta um endereço curinga [::] aceitará apenas conexões IPv6 ou conexões IPv6 e IPv4. Este parâmetro está ativado por padrão. Só pode ser definido uma vez no início.

Este parâmetro está ativado por padrão significa que você não deve usaripv6only=on. Não adianta nada e pode potencialmente criar problemas (veja o próximo ponto).

Ela só pode ser definido uma vez significa que se você tem mais de uma vez em qualquer lugar em sua configuração (como em diferentes blocos de servidor), ele irá lançar um erro:nginx: [emerg] duplicate listen options for [::]:80.

simlev
fonte