2010-07-07 21 views
15

Estoy corriendo Ubuntu Hardy 8.04 y nginx 0.7.65, y cuando intento comenzar mi servidor nginx:nginx: (99: No se puede asignar la dirección solicitada)

$ sudo /etc/init.d/nginx start 

me sale el siguiente error:

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

donde "IP" es un marcador de posición para mi dirección IP. ¿Alguien sabe por qué ese error podría estar sucediendo? Esto se está ejecutando en EC2.

Mi archivo nginx.conf se ve así:

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

} 

y mi /usr/local/nginx/sites-enabled/example.com parece:

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; 

     } 

Respuesta

0

No si han quedado proceso/programa que lo usa/escuchar en el puerto 80.

puede comprobar que el uso de -lp netstat. Elimina ese proceso y comienza nginx.

+0

hmm por desgracia no hay nada escuchando en el puerto 80. –

+0

hmm ... cualquier ejecución rápida de cgi tal vez ... –

+0

no ... no veo fast-cgi ... –

5

Para evitar la codificación dura de la dirección IP en la configuración, haga lo siguiente:

listen *:80 
0

Con Amazon EC2 y direcciones IP elásticas, el servidor no sabe en realidad su IP como ocurre con la mayoría de cualquier otro servidor. Así que en los archivos de apache virtuales de acogida, al menos, que puso *: 80 en lugar de su IP elástica: 80

entonces funciona correctamente. Entonces teóricamente, hacer *: 80 para nginx debería funcionar igual, pero cuando lo haces, obtienes [emerg]: bind() a 0.0.0.0:80 fallido (98: dirección ya en uso). No he encontrado una solución todavía. .

39

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

Así que hay que decir a su Linux para permitir que los procesos se unan a la dirección que no es local. Sólo tiene que añadir la siguiente línea en /etc/sysctl.conf archivo:

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

y luego volver a cargar el sysctl.conf por:

$ sysctl -p /etc/sysctl.conf

el que va a estar bien en los reinicios.

1

Como kirpit mencionado anteriormente que querrá permitir que los procesos de Linux que se unen a una dirección IP local:

nano /etc/sysctl.conf 

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

sysctl -p /etc/sysctl.conf 

entonces usted quiere añadir la dirección IP privada que se asocia con su IP elástica y añadir que a su sitios de configuración:

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

Recargar nginx:

service nginx reload 

¡Todo listo!

0

Para Amazon EC2 y direcciones IP elásticas, sysctl.conf no funcionará ya que nginx aún no escucha en eth0.

Por lo tanto, es necesario listen *;

0

Para las personas que podrían estar tratando con esto en el futuro, Acabo de mirar mi IP privada en la instancia AWS y con destino a eso. Verifiqué que nginx podía escuchar públicamente y realizar mi reescritura después de eso. No pude hacer *: PORT ya que tenía un servidor interno al que estaba proxying.

0

Si se utiliza el Administrador de Red, usted tiene que esperar para elevar la interfaz de red antes de iniciar el servicio:

systemctl permiten NetworkManager-espera-online.service

Cuestiones relacionadas