Linode har uppgraderats igen~ Men eftersom den gamla maskinen i det japanska datorrummet kommer ta några veckor att uppgradera, kan jag knappt vänta, så jag öppnade en ny maskin, planerade att flytta hem, och förresten, sopa bort onödigt skräp från servern.
Den nya maskinen använder lnmp-ett-klicks installationsskript som jag själv skrev (faktum är att det mesta av koden finns online = =##), och efter att ha gjort skriptet på DigitalOcean lade jag det på Linode för installation. Det var inga problem med installation och flytt, men så fort den startades om efter installationen uppstod ett problem.
Efter omstart är det rimligt att anta att Nginx ska starta automatiskt, men efter lång väntan kan webbplatsen fortfarande inte nås. Logga in på SSH och utför:
Tjänst nginx start
Starta Nginx manuellt, så kommer webbplatsen att vara tillgänglig på nolltid. Självstartande skriptet fungerar bra, och det finns inga problem med manuell start, varför startar nginx bara inte?
När jag gick igenom loggarna hittade jag en rad som ser ut denna:
2014/05/02 17:02:28 [emerg] 2912#0: bind() till [2400:8900::f03c:91ff:fe6e:5889]:80 misslyckades (99: Kan inte tilldela önskad adress)
Det känns som att när jag startar Nginx har IPv6 inte initialiserats, så uppstarten misslyckades. När jag loggar in på SSH och manuellt startar Nginx har IPv6 redan initierats, så det kan starta normalt.
Förmodligen gissade du orsaken, hur löser du det? Efter en lång dag med Google hittade jag ett liknande problem och en liknande lösning på ServerFault, och jag kommer att dokumentera det här.
Infoga i /etc/sysctl.conf:
- sysctl -w net.ipv6.conf.eth0.dad_transmits=0
Kopiera koden Eller:
Lägg till en linje i /etc/network/interfaces:
- post-up while ip -6 addr show tentative | grep . > /dev/null ; do sleep 1 ; done
Kopiera koden Jag använder den senare metoden för att lösa problemet.
|