Ошибка nginx: (99: невозможно назначить запрошенный адрес) - PullRequest
24 голосов
/ 07 июля 2010

Я использую Ubuntu Hardy 8.04 и nginx 0.7.65, и когда я пытаюсь запустить сервер nginx:

$ sudo /etc/init.d/nginx start

Я получаю следующую ошибку:

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

где "IP" - это место для моего IP-адреса. Кто-нибудь знает, почему эта ошибка может происходить? Это работает на EC2.

Мой файл nginx.conf выглядит так:

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

}

и мой /usr/local/nginx/sites-enabled/example.com выглядит так:

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;

        }

Ответы [ 8 ]

52 голосов
/ 30 октября 2012

С Amazon EC2 и эластичными IP-адресами сервер фактически не знает свой IP-адрес, как с большинством других серверов.

Таким образом, вы должны указать своему linux разрешить процессам связываться с нелокальным адресом. Просто добавьте следующую строку в /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

и затем перезагрузите ваш sysctl.conf:

$ sysctl -p /etc/sysctl.conf

, что будет хорошо при перезагрузке.

8 голосов
/ 21 октября 2010

Чтобы избежать жесткого кодирования IP-адреса в конфигурации, сделайте следующее:

listen *:80
2 голосов
/ 06 марта 2013

Как уже упоминалось выше, вы должны разрешить процессам linux связываться с локальным 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

Затем вы хотите добавить частный IP-адрес , который связанс вашим эластичным ip и добавьте его в конфигурацию вашего сайта:

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

Перезагрузите nginx:

service nginx reload

Все готово!

0 голосов
/ 09 июля 2015

Если вы используете Network Manager, вам нужно подождать, чтобы поднять сетевой интерфейс, прежде чем запускать службу:

systemctl включить NetworkManager-wait-online.service

0 голосов
/ 11 марта 2014

Для людей, которые могут столкнуться с этим в будущем, я просто посмотрел свой личный IP в экземпляре AWS и привязался к этому. После этого я убедился, что nginx мог публично слушать и переписывать. Я не смог сделать *: PORT, так как у меня был внутренний сервер, на который я проксировал.

0 голосов
/ 15 апреля 2013

Для Amazon EC2 и эластичных IP-адресов sysctl.conf не будет работать, поскольку nginx все еще не прослушивает eth0.

Итак, вам нужно listen *;

0 голосов
/ 08 января 2011

С Amazon EC2 и эластичными IP-адресами сервер фактически не знает свой IP-адрес, как с большинством других серверов. Таким образом, в файлы виртуального хоста apache вы, по крайней мере, добавляете *: 80, а не эластичный IP: 80

Тогда все работает правильно. Таким образом, теоретически, выполнение *: 80 для nginx должно работать так же, но когда вы получите [emerg]: bind () до 0.0.0.0:80 не удалось (98: адрес уже используется) Пока не нашли решения. .

0 голосов
/ 07 июля 2010

Возможно, есть оставшийся процесс / программа, которая использует / прослушивает порт 80.

Вы можете проверить это с помощью netstat -lp.Убейте этот процесс и запустите nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...