2010-07-07 8 views
15

Ich bin mit Ubuntu Hardy 8.04 und nginx 0.7.65, und wenn ich versuche, meine nginx Server starten:nginx Fehler: (99: angeforderte Adresse kann nicht zuordnen)

$ sudo /etc/init.d/nginx start 

ich die folgende Fehlermeldung erhalten:

Starting nginx: [emerg]: bind() to IP failed (99: Cannot assign requested address) 

wo "IP" ist ein Platzhalter für meine IP-Adresse. Weiß jemand, warum dieser Fehler passiert? Dies läuft auf EC2.

Meine nginx.conf Datei sieht wie folgt aus:

user www-data www-data; 
worker_processes 4; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    access_log /usr/local/nginx/logs/access.log; 

    sendfile  on; 
    tcp_nopush  on; 
    tcp_nodelay   on; 

    keepalive_timeout 3; 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/css application/x-javascript text/xml application/xml 
    application/xml+rss text/javascript; 

    include /usr/local/nginx/sites-enabled/*; 

} 

und meine /usr/local/nginx/sites-enabled/example.com wie folgt aussieht:

server { 

     listen IP:80; 
     server_name example.com; 
     rewrite ^/(.*) https://example.com/$1 permanent; 

     } 

server { 

     listen IP:443 default ssl; 

     ssl   on; 
     ssl_certificate  /etc/ssl/certs/myssl.crt; 
     ssl_certificate_key /etc/ssl/private/myssl.key; 

     ssl_protocols  SSLv3 TLSv1; 
     ssl_ciphers ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP; 

     server_name example.com; 

     access_log /home/example/example.com/log/access.log; 
     error_log /home/example/example.com/log/error.log; 

     } 

Antwort

0

Es könnte noch werden Prozess/Programm, das an Port 80 verwendet/hört.

Sie können das mit Netstat -lp überprüfen. Töte diesen Prozess und starte nginx.

+0

hmm leider gibt es nichts zu hören Port 80. –

+0

hmm .. irgendein Fast-CGI läuft vielleicht .. –

+0

Nö ... nicht schnell-cgi sehen ... –

5

Um Hartcodierung der IP-Adresse in der Config zu vermeiden, dies zu tun:

listen *:80 
0

Mit Amazon EC2 und elastischem IPs, der Server nicht wissen, tatsächlich seine IP wie bei den meisten anderen Servern. Also in den virtuellen Apache-Host-Dateien mindestens setzen Sie *: 80 statt Ihrer elastischen IP: 80

Dann funktioniert es richtig. Theoretisch sollte das Ausführen von *: 80 für nginx genauso funktionieren, aber wenn Sie dies tun, wird [emerg]: bind() auf 0.0.0.0:80 fehlgeschlagen (98: Adresse wird bereits verwendet). Habe noch keine Lösung gefunden. .

39

With Amazon EC2 and elastic IPs, the server doesn't actually know its IP as with most any other server.

Sie müssen also Ihrem Linux mitteilen, dass Prozesse an die nicht lokale Adresse binden dürfen. Fügen Sie einfach die folgende Zeile in /etc/sysctl.conf Datei:

# allow processes to bind to the non-local address 
# (necessary for apache/nginx in Amazon EC2) 
net.ipv4.ip_nonlocal_bind = 1 

und dann sysctl.conf nachladen von:

$ sysctl -p /etc/sysctl.conf

die auf Neustarts in Ordnung sein wird.

1

Wie kirpit oben erwähnt werden Sie Linux-Prozesse auf eine lokale IP-Adresse binden zulassen möchten:

nano /etc/sysctl.conf 

# allow processes to bind to the non-local address 
net.ipv4.ip_nonlocal_bind = 1 

sysctl -p /etc/sysctl.conf 

Dann möchten Sie die private IP-Adresse hinzuzufügen, die mit Ihrem Elastic IP zugeordnet ist, und hinzufügen, dass auf Ihre Seiten config:

nano /etc/nginx/sites-available/example.com 

Reload nginx:

service nginx reload 

Alles fertig!

0

Für Amazon EC2 und elastische IPs funktioniert sysctl.conf nicht, da nginx immer noch nicht auf eth0 hören.

Also, Sie müssen listen *;

0

Für Menschen, die in Zukunft mit diesem zu tun könnte, ich sah nur meine private IP in der AWS-Instanz auf und gebunden an das. Ich habe nachgeprüft, dass nginx in der Lage war, öffentlich zuzuhören und danach meinen Text zu schreiben. Ich konnte nicht *: PORT, da ich einen internen Server hatte, an dem ich teilnahm.

0

Wenn Sie Network Manager verwenden, müssen Sie warten, bis die Netzwerkschnittstelle zu erhöhen, bevor Starten des Dienstes:

systemctl aktivieren Sie Network-wait-online.service