Definindo globalmente ipv6only = off

7

Desde uma atualização, meu servidor nginx só está disponível via IPv6 e não IPv4 enquanto minha configuração continha

listen   [::]:80 default_server;

Agora mudei para

listen   [::]:80 default_server ipv6only=off;

e o servidor está disponível via IPv4 novamente. Isto deve ser devido às mudanças em nginx 1.3.4 (seção “Alterações com nginx 1.3.4”) . / p>

Como tenho mais de uma configuração de servidor no mesmo mashine, gostaria de definir o ipv6only=off globalmente. Existe alguma possibilidade de fazê-lo?

    
por white_gecko 30.05.2013 / 22:15

2 respostas

10

Acabei de passar por isso com uma atualização de 1.0 para 1.4.

Como apenas um único ouvinte está realmente vinculado a qualquer porta, basta especificar ipv6only=off em qualquer um de suas listen diretivas.

Então, no meu bloco server padrão, eu tenho:

    listen [::]:80 ipv6only=off default_server;

e

    listen [::]:443 ipv6only=off default_server;

Todos os outros blocos server simplesmente especificam as diretivas listen originais. E isso funciona; qualquer host virtual pode ser acessado via IPv4 ou IPv6.

Você também pode adicioná-lo a todos deles, mas isso não é realmente necessário. Adicioná-lo a qualquer um deles é suficiente.

No entanto, como o sinalizador ipv6only= é somente Linux, não uso mais essa construção. Minhas diretivas atuais especificam IPv4 e IPv6 explicitamente, como:

listen [::]:80 default_server;
listen 80 default_server;
    
por 30.05.2013 / 22:20
4

Uma alternativa à resposta do @Michael Hampton (mas você precisa tocar em todos os arquivos) é inserir

listen 80;      # listen for IPv4
listen [::]:80; # listen for IPv6

para todos os servidores.

É estranho que inserir listen [::]:80 ipv6only=off para mais de um servidor resulte em

nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default.conf:3

E uma mistura de listen 80; e ipv6only=off (em servidores diferentes) resulta em

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
    
por 31.05.2013 / 10:45

Tags