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

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

Когда я перезагружаю свой сервер (не nginx, а весь сервер), Nginx не запускается автоматически. После того, как я вошел на сервер, я могу запустить nginx вручную (service nginx start). Он работает. Но если я снова перезагружу, мне придется вручную запускать 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)

решение1

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

решение2

У меня были похожие симптомы, но другая конфигурация. На сервере установлен 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)

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

RTNETLINK answers: File exists
Failed to bring up eth0.

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

решение3

На моих хостах 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

Связанный контент