web-dev-qa-db-fra.com

erreur nginx: (99: impossible d'affecter l'adresse demandée)

J'utilise Ubuntu Hardy 8.04 et nginx 0.7.65, et lorsque 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 fonctionne 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_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;

        }
21
k-g-f

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

Vous devez donc indiquer à votre Linux d'autoriser les processus à se lier à une 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 en:

$ sysctl -p /etc/sysctl.conf

qui sera bien sur les redémarrages.

51
kirpit

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

listen *:80
8
Till

En tant que kirpit mentionné ci-dessus, vous souhaiterez permettre aux processus linux de 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 souhaitez ajouter l'adresse IP privée qui est associée à votre adresse IP élastique et l'ajouter à la configuration de vos sites:

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

Recharger nginx:

service nginx reload

Terminé!

2
user2035677

Si vous utilisez Network Manager, vous devez attendre avant de lancer le service avant de lancer le service:

systemctl activer NetworkManager-wait-online.service

0
Ultra Breaker

Avec Amazon EC2 et les adresses IP élastiques, le serveur ne connaît pas son adresse IP comme avec la plupart des autres serveurs. Ainsi, dans les fichiers d’hôte virtuel Apache, vous devez au moins indiquer *: 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 manière, mais vous obtiendrez [émerg]: bind () avec 0.0.0.0:80 en échec (98: adresse déjà utilisée). Je n'ai pas encore trouvé de solution ..

0
cchiera

Pour les personnes qui pourraient être confrontées à cela à l'avenir, j'ai simplement consulté mon adresse IP privée dans l'instance AWS et je suis lié à 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 auquel je mandatais.

0
MLindsay

Il se peut qu’il reste un processus/programme qui utilise/écoute sur le port 80. 

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

0
Rodney Quillo