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