Wenn ich meinen Server neu starte (nicht nginx, sondern den ganzen Server), startet Nginx nicht automatisch. Nachdem ich mich beim Server angemeldet habe, kann ich nginx manuell starten (service nginx start). Das funktioniert. Aber wenn ich erneut neu starte, muss ich Nginx manuell starten. Als ich das error.log für Nginx überprüfte, sah ich diesen Fehler mehrmals wiederholt:
2012/08/27 09:19:23 [emerg] 1066#0: bind() to [ipv6]:80 failed (99: Cannot assign requested address)
Wie kann ich das beheben? Was ist das für ein Problem? (Ich verwende einen Ubuntu 12.04-Server)
Antwort1
bind() an [ipv6]:80 fehlgeschlagen (99: Angeforderte Adresse kann nicht zugewiesen werden)
Es klingt, als ob Ihre IPv6-Adresse gerade eth0 zugewiesen wurde und immer noch in dervorläufiger Zustand, daher kann Nginx diese IP nicht abhören.
Entweder das Einschalten von DAD (Erkennung doppelter Adressen) durch Ausführen von:
sysctl -w net.ipv6.conf.eth0.dad_transmits=0
(einfügen in /etc/sysctl.conf
für permanent)
/etc/network/interfaces
oder fügen Sie diese Zeile unter der inet6-Schnittstellendefinition ein .
post-up while ip -6 addr show tentative | grep . > /dev/null ; do sleep 1 ; done
Quelle:http://pyro.eu.org/how-to/micro/nginx-cannot-assign-requested-address-ipv6.txt
Antwort2
Ich hatte ähnliche Symptome, aber eine andere Konfiguration. Auf dem Server läuft Debian Wheezy mit statischer IPv4- und IPv6-Adresse.
# /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
Bei jedem Booten konnte nginx nicht gestartet werden:
bind() to [2001:db8::3]:80 failed (99: Cannot assign requested address)
Der manuelle Start funktioniert einwandfrei und die manuelle Überprüfung hat auch gezeigt, dass die Adressen und Routen festgelegt sind. Das bloße Festlegen der IPv6-Adresse interfaces
(ohne die IPv4-Adresse) hat funktioniert. Das Entfernen des statischen IPv6-Gateways hat ebenfalls funktioniert, aber dann wird eine Link-Local-Gateway-Adresse verwendet. Nach weiterem Debuggen stellte ich fest, dass der Startvorgang Folgendes ausspuckte:
RTNETLINK answers: File exists
Failed to bring up eth0.
Es stellt sich heraus, dass eine IPv6-Adresse und ein Gateway automatisch vom Router zugewiesen werden, wenn die Schnittstelle aktiviert wird. Um dieses Verhalten zu vermeiden, legen Sie accept_ra 0
im iface eth0 inet6
Abschnitt fest. Der inet6
Abschnitt muss auch vor den inet
Abschnitt verschoben werden, da sonst die Standardroute weiterhin auf die Link-Local-Adresse verweist.
Antwort3
Auf meinen Ubuntu 14.04-Hosts musste ich nur den IPv6-Eintrag (inet6) VOR den IPv4-Eintrag (inet) verschieben.
So funktioniert es:
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