Erreur nginx: (99: Impossible d’atsortingbuer l’adresse demandée)

J’utilise Ubuntu Hardy 8.04 et nginx 0.7.65, et quand j’essaie de démarrer mon serveur nginx:

$ sudo /etc/init.d/nginx start 

Je reçois l’erreur suivante:

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

où “IP” est un espace réservé pour mon adresse IP. Est-ce que quelqu’un sait pourquoi cette erreur pourrait se produire? Ceci est en cours d’exécution sur EC2.

Mon fichier nginx.conf ressemble à ceci:

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

et mon /usr/local/nginx/sites-enabled/example.com ressemble à:

 server { listen IP:80; server_name example.com; rewrite ^/(.*) https://example.com/$1 permanent; } server { listen IP:443 default ssl; ssl on; ssl_certificatee /etc/ssl/certs/myssl.crt; ssl_certificatee_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; } 

Avec Amazon EC2 et les IP élastiques, le serveur ne connaît pas réellement son IP comme avec la plupart des autres serveurs.

Donc, vous devez dire à votre Linux d’autoriser les processus à se lier à l’adresse non locale. Ajoutez simplement la ligne suivante dans le fichier /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 

puis rechargez votre sysctl.conf par:

$ sysctl -p /etc/sysctl.conf

ce qui ira bien au redémarrage.

Pour éviter de coder en dur l’adresse IP dans la configuration, procédez comme suit:

 listen *:80 

Comme mentionné ci-dessus, vous voudrez autoriser les processus linux à se lier à une adresse IP locale:

 nano /etc/sysctl.conf # allow processes to bind to the non-local address net.ipv4.ip_nonlocal_bind = 1 sysctl -p /etc/sysctl.conf 

Ensuite, vous voulez append l’ adresse IP privée associée à votre adresse IP élastique et l’append à la configuration de votre site:

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

Rechargez nginx:

 service nginx reload 

Terminé!

Il peut restr des processus / programmes utilisant / écoutant au port 80.

Vous pouvez vérifier cela en utilisant netstat -lp. Tuez ce processus et lancez nginx.

Avec Amazon EC2 et les IP élastiques, le serveur ne connaît pas réellement son IP comme avec la plupart des autres serveurs. Donc, dans les fichiers d’hôte virtuel Apache, au moins vous mettez *: 80 plutôt que votre adresse IP élastique: 80

Ensuite, cela fonctionne correctement. Donc théoriquement, faire *: 80 pour nginx devrait fonctionner de la même façon, mais quand vous le faites, vous obtenez [emerg]: bind () à 0.0.0.0:80 a échoué (98: adresse déjà utilisée). Je n’ai pas encore trouvé de solution. .

Pour les personnes qui pourraient avoir à faire face à cela à l’avenir, je viens de rechercher mon adresse IP privée dans l’instance AWS et liée à cela. J’ai vérifié que nginx était capable d’écouter publiquement et d’effectuer ma réécriture après cela. Je ne pouvais pas faire *: PORT car j’avais un serveur interne vers lequel je travaillais.

Si vous utilisez Network Manager, vous devez attendre pour augmenter l’interface réseau avant de démarrer le service:

systemctl activer NetworkManager-wait-online.service

Pour Amazon EC2 et les IP élastiques, sysctl.conf ne fonctionnera pas car nginx n’écoute toujours pas eth0 .

Donc, vous devez listen *;