2010-07-07 18 views
15

Używam Ubuntu Hardy 8.04, nginx 0.7.65, a gdy próbuję zaczynając mój serwer nginx:nginx: (99: Nie można przypisać żądany adres)

$ sudo /etc/init.d/nginx start 

pojawia się następujący błąd:

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

gdzie "IP" jest symbolem zastępczym dla mojego adresu IP. Czy ktoś wie, dlaczego ten błąd może się zdarzyć? To działa na EC2.

Mój plik nginx.conf wygląda następująco:

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/*; 

} 

i mój /usr/local/nginx/sites-enabled/example.com wygląda następująco:

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; 

     } 

Odpowiedz

0

Nie może być pozostały proces/program, który używa/nasłuchuje na porcie 80.

Możesz to sprawdzić za pomocą netstat -lp. Zabij ten proces i uruchom Nginx.

+0

hmm niestety nic nie nasłuchuje na porcie 80. –

+0

hmm .. jakikolwiek fast-cgi działający może .. –

+0

nie ... nie widzę fast-cgi ... –

5

Aby uniknąć twarde kodowania adresu IP w konfiguracji, to zrobić:

listen *:80 
0

Z Amazon EC2 i elastycznych IP, serwer faktycznie nie znać jego IP jak w większości jakimkolwiek innym serwerze. Tak więc w plikach hosta wirtualnego apache przynajmniej umieszczasz *: 80 zamiast elastycznego ip: 80

Następnie działa poprawnie. Tak więc teoretycznie, wykonanie *: 80 dla nginx powinno działać tak samo, ale kiedy pojawi się [emerg]: bind() do 0.0.0.0:80 nie powiodło się (98: Address już w użyciu). Nie znalazłem jeszcze rozwiązania. .

39

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

Musisz więc powiedzieć swojemu linuksowi, aby umożliwić procesom wiązanie z nielokalnym adresem. Wystarczy dodać następującą linię do /etc/sysctl.conf pliku:

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

a następnie przeładować sysctl.conf przez:

$ sysctl -p /etc/sysctl.conf

który będzie dobrze na restartów.

1

Jak wspomniano powyżej kirpit będziemy chcieli, aby umożliwić procesy linux do wiązania się z lokalnym adresem IP:

nano /etc/sysctl.conf 

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

sysctl -p /etc/sysctl.conf 

Następnie chcesz dodać adres Private IP, który jest skojarzony z elastycznego i ip dodać, że do witryn config:

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

Odśwież nginx:

service nginx reload 

Wszystko gotowe!

0

Dla Amazon EC2 i elastycznych adresów IP, sysctl.conf nie będzie działać, ponieważ nadal nie będzie nasłuchiwał nginx na eth0.

Więc trzeba listen *;

0

Dla ludzi, którzy mogą mieć do czynienia z tym w przyszłości, po prostu spojrzał na mój prywatny adres IP w instancji AWS i związany z tym. Potwierdziłem, że nginx był w stanie słuchać publicznie i później przeprogramować. Nie mogłem tego zrobić *: PORT, ponieważ miałem serwer wewnętrzny, którego używałam jako proxy.

0

Jeśli używasz Network Manager, trzeba czekać, aby podnieść interfejs sieciowy przed rozpoczęciem usługę:

systemctl umożliwić NetworkManager-wait-online.service

Powiązane problemy