Nginx konnte nicht gestartet werden. Angeforderte Adresse kann nicht zugewiesen werden?

Nginx konnte nicht gestartet werden. Angeforderte Adresse kann nicht zugewiesen werden?

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.conffür permanent)

/etc/network/interfacesoder 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 0im iface eth0 inet6Abschnitt fest. Der inet6Abschnitt muss auch vor den inetAbschnitt 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

verwandte Informationen