ssl - ec2 - Error nginx:(99: No se puede asignar la dirección solicitada)
nginx aws certificate manager (8)
Estoy ejecutando Ubuntu Hardy 8.04 y nginx 0.7.65, y cuando intento iniciar mi servidor nginx:
$ sudo /etc/init.d/nginx start
Obtuve 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 ocurriendo? Esto se está ejecutando en EC2.
Mi archivo nginx.conf tiene este aspecto:
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 se ve así:
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;
}
Con Amazon EC2 y las IP elásticas, el servidor no sabe realmente su IP como con la mayoría de los demás servidores.
Por lo tanto, debe indicar a Linux que permita que los procesos se vinculen a la dirección no local. Solo agregue la siguiente línea en el archivo /etc/sysctl.conf
:
# allow processes to bind to the non-local address
# (necessary for apache/nginx in Amazon EC2)
net.ipv4.ip_nonlocal_bind = 1
y luego recargue su sysctl.conf por:
$ sysctl -p /etc/sysctl.conf
que estará bien en los reinicios.
Como kirpit mencionó anteriormente, querrá permitir que los procesos de Linux se vinculen 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
Luego desea agregar la dirección IP privada que está asociada con su ip elástica y agregarla a la configuración de su sitio:
nano /etc/nginx/sites-available/example.com
Recargar nginx:
service nginx reload
¡Todo listo!
Con Amazon EC2 y las IP elásticas, el servidor no sabe realmente su IP como con la mayoría de los demás servidores. Así que en los archivos de host virtual de apache al menos pones *: 80 en lugar de tu elastic ip: 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). Todavía no he encontrado una solución. .
Para Amazon EC2 y las IP elásticas, sysctl.conf
no funcionará ya que nginx aún no escuchará en eth0
.
Entonces, necesitas listen *;
Para evitar la codificación de la dirección IP en la configuración, haga lo siguiente:
listen *:80
Para las personas que podrían estar lidiando con esto en el futuro, simplemente busqué mi IP privada en la instancia de AWS y me uní a eso. Verifiqué que nginx fue capaz de escuchar públicamente y realizar mi reescritura después de eso. No pude hacerlo *: PUERTO porque tenía un servidor interno al que estaba procesando.
Puede haber un proceso / programa restante que esté usando / escuchando en el puerto 80.
Puedes comprobarlo utilizando netstat -lp. Matar ese proceso y comenzar nginx.
Si está utilizando Network Manager, debe esperar para activar la interfaz de red antes de iniciar el servicio:
systemctl habilita NetworkManager-wait-online.service