Назад | Перейти на главную страницу

Nginx не запустился. Не можете назначить запрошенный адрес?

Когда я перезагружаю свой сервер (не nginx, а весь сервер), Nginx не запускается автоматически. После входа на сервер я могу запустить nginx вручную (запуск службы nginx). Оно работает. Но если я перезапущусь снова, мне придется вручную запустить Nginx. При проверке error.log для Nginx я увидел, что эта ошибка повторялась несколько раз:

2012/08/27 09:19:23 [emerg] 1066#0: bind() to [ipv6]:80 failed (99: Cannot assign requested address)

Как я могу это исправить? Что это за проблема? (Я запускаю сервер Ubuntu 12.04)

bind () to [ipv6]: 80 не удалось (99: невозможно назначить запрошенный адрес)

Похоже, ваш IPv6-адрес только что был назначен на eth0 и все еще находится в предварительное состояние, поэтому Nginx не может установить прослушивание на этом IP-адресе.

Либо очередь папы (Обнаружение повторяющегося адреса), запустив:

sysctl -w net.ipv6.conf.eth0.dad_transmits=0

(вставить в /etc/sysctl.conf на постоянное)

или добавьте эту строку в /etc/network/interfaces, в соответствии с определением интерфейса inet6

post-up while ip -6 addr show tentative | grep . > /dev/null ; do sleep 1 ; done

Источник: http://pyro.eu.org/how-to/micro/nginx-cannot-assign-requested-address-ipv6.txt

У меня были похожие симптомы, но другая конфигурация. На сервере работает Debian Wheezy со статическим IPv4- и IPv6-адресом.

# /etc/network/interfaces
auto lo eth0
iface lo inet loopback

iface eth0 inet static
 address 192.0.2.3
 netmask 255.255.255.0
 gateway 192.0.2.1

iface eth0 inet6 static
 address 2001:db8::3
 netmask 64
 gateway 2001:db8::1        

При каждой загрузке nginx не запускался:

bind() to [2001:db8::3]:80 failed (99: Cannot assign requested address)

Ручной запуск работает нормально, и ручная проверка также показала, что адреса и маршруты установлены. Просто установите IPv6-адрес в interfaces (без адреса IPv4) работал. Удаление статического шлюза IPv6 также сработало, но тогда используется адрес шлюза локального канала. После дальнейшей отладки обнаружил, что процесс загрузки выплевывает:

RTNETLINK answers: File exists
Failed to bring up eth0.

Оказывается, IPv6-адрес и шлюз автоматически назначаются маршрутизатором при открытии интерфейса. Чтобы избежать такого поведения, установите accept_ra 0 в iface eth0 inet6 раздел. В inet6 раздел также нужно переместить перед inet раздел или маршрут по умолчанию все равно будет указывать на локальный адрес ссылки.

На моих хостах Ubuntu 14.04 мне просто нужно было переместить запись IPv6 (inet6) ПЕРЕД записью IPv4 (inet).

Итак, это работает:

auto eth0
iface eth0 inet6 static
    address fd57:c87d:f1ee:2::6
    netmask 64
    up /sbin/ip -6 route add fd57:c87d:f1ee::/48 via fe80::1 dev $IFACE

iface eth0 inet static
   address 10.0.3.29
   netmask 255.255.255.0
   gateway 10.0.3.1
   dns-nameserver 10.0.3.1