Quando eu reinicio meu servidor (não o nginx, o servidor inteiro), o Nginx falha ao iniciar automaticamente. Depois de fazer login no servidor, posso iniciar o nginx manualmente (serviço nginx start). Funciona. Mas se eu reiniciar novamente, terei que iniciar manualmente o Nginx. Ao verificar o error.log do Nginx, vi esse erro repetido várias vezes:
2012/08/27 09:19:23 [emerg] 1066#0: bind() to [ipv6]:80 failed (99: Cannot assign requested address)
Como posso consertar isso? Qual é esse problema? (Estou executando um servidor Ubuntu 12.04)
Responder1
bind() to [ipv6]:80 falhou (99: Não é possível atribuir o endereço solicitado)
Parece que seu endereço IPv6 acabou de ser atribuído à eth0 e ainda está noestado provisório, portanto, o Nginx não pode estabelecer uma escuta nesse IP.
Qualquer volta do PAI (Detecção de endereço duplicado) Correndo:
sysctl -w net.ipv6.conf.eth0.dad_transmits=0
(inserir em /etc/sysctl.conf
para permanente)
ou adicione esta linha /etc/network/interfaces
, na definição da interface inet6
post-up while ip -6 addr show tentative | grep . > /dev/null ; do sleep 1 ; done
Fonte:http://pyro.eu.org/how-to/micro/nginx-cannot-assign-requested-address-ipv6.txt
Responder2
Tive sintomas semelhantes, mas uma configuração diferente. O servidor executa o Debian Wheezy com endereços IPv4 e IPv6 estáticos configurados.
# /etc/network/interfaces
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.0.2.3
netmask 255.255.255.0
gateway 192.0.2.1
iface eth0 inet6 static
address 2001:db8::3
netmask 64
gateway 2001:db8::1
A cada inicialização, o nginx falhava ao iniciar:
bind() to [2001:db8::3]:80 failed (99: Cannot assign requested address)
A inicialização manual funciona bem e a inspeção manual também mostrou que os endereços e rotas estão definidos. Apenas definir o endereço IPv6 interfaces
(sem o endereço IPv4) funcionou. A remoção do gateway IPv6 estático também funcionou, mas um endereço de gateway local de link é usado. Após mais depuração, descobri que o processo de inicialização seria interrompido:
RTNETLINK answers: File exists
Failed to bring up eth0.
Acontece que um endereço IPv6 e um gateway são atribuídos automaticamente pelo roteador quando a interface é ativada. Para evitar esse comportamento, defina accept_ra 0
na iface eth0 inet6
seção. A inet6
seção também deve ser movida antes da inet
seção ou a rota padrão ainda apontará para o endereço do link local.
Responder3
Nos meus hosts Ubuntu 14.04, eu só precisava mover a entrada IPv6 (inet6) ANTES da entrada IPv4 (inet).
Então isso funciona:
auto eth0
iface eth0 inet6 static
address fd57:c87d:f1ee:2::6
netmask 64
up /sbin/ip -6 route add fd57:c87d:f1ee::/48 via fe80::1 dev $IFACE
iface eth0 inet static
address 10.0.3.29
netmask 255.255.255.0
gateway 10.0.3.1
dns-nameserver 10.0.3.1