Re: Не запустился nginx при старте OpnenVZ контейнера

Konstantin Pavlov thresh на nginx.com
Вт Янв 12 18:11:21 UTC 2016


On 12/01/2016 16:15, Gena Makhomed wrote:
> On 28.12.2015 14:45, Konstantin Pavlov wrote:
>
>>> Не запустился nginx при старте OpenVZ контейнера.
>>> nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign
>>> requested address)
>
>> Попробуйте костыль из
>>
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme
>>
>> ?
>
> Костыль не работает:

> # cat /etc/redhat-release
> CentOS Linux release 7.2.1511 (Core)

> # systemctl enable NetworkManager-wait-online.service
> Failed to execute operation: No such file or directory

> # systemctl enable systemd-networkd-wait-online.service
> Failed to execute operation: No such file or directory

Контейнер, видимо, не содержит ни networkmanager, ни networkd.

Насколько я помню как работали openvz/vzctl (последний раз доводилось их
использовать во времена, когда RHEL7 еще не было), конфигурирование и
поднятие сети в контейнере там было сделано при помощи третьих
(относительно ОС в контейнере) скриптов, запускаемых из хостовой системы
независимо от init-системы в контейнере и последующим аналогом service
network restart.  Если это до сих пор так, то, получается, systemd
запускает сеть без настроек, потом vzctl их добавляет и перезапускает
сеть.  Очевидно, что в таком режиме демон, желающий забиндиться на
определенный адрес, работать не сможет - и дело не в нем и не в systemd.

> этот костыль не работает. но помог другой костыль -
> везде прописать "listen 443" и "listen 80" вместо явного указания IP.
>
> это баг или фича?
>
> если фича - то может быть тогда имеет смысл поправить
> документацию, что на CentOS 7.2 где systemd нельзя в директиве
> listen указывать IP, потому что в этом случае nginx не запустится.

Мы не наблюдаем подобной проблемы на серверах (пусть даже
виртуализированных средствами KVM/Xen) с CentOS 7.2, в т.ч. с DHCP.

> или какой тут правильный вариант действий для пользователей nginx ?

В конкретном случае я вижу три варианта (по нарастающей сложности):

- sysctl net.ipv4.ip_nonlocal_bind=1
- listen по wildcard, как вы и сделали
- использовать отдельный nginx.service, как в вашем патче.

-- 
Konstantin Pavlov



Подробная информация о списке рассылки nginx-ru