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

2016-01-12 Пенетрантность Gena Makhomed

On 12.01.2016 20:11, Konstantin Pavlov wrote:


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


Константин, спасибо за помощь!

Теперь понятно в чем проблема.

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Vasiliy P. Melnik
не?

If you write a server: if you want to listen on other, explicitly
configured addresses, consider using the IP_FREEBIND sockopt functionality
of the Linux kernel. This allows your code to bind to an address even if it
is not actually (yet or ever) configured locally. This also makes your code
robust towards network configuration changes.

12 января 2016 г., 19:41 пользователь Gena Makhomed  написал:

> On 12.01.2016 19:22, Vasiliy P. Melnik wrote:
>
> правильный ответ - не использовать NetworkManager
>>
>
> NetworkManager не используется.
>
> вопрос явно в том, что интерфейса просто нет в момент старта нгинкса
>>
>
> IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd:
>
> http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html
>
> на мой взгляд, проблема в systemd в первую очередь,
> и во-вторую очередь в unit-файле nginx. В документе
> http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
> подробно написано как работает network.target и как надо было бы
> переписать nginx чтобы он стал совместимым с systemd и network.target
>
> --
> Best regards,
>  Gena
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Konstantin Pavlov
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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Maxim Dounin
Hello!

On Tue, Jan 12, 2016 at 07:41:43PM +0200, Gena Makhomed wrote:

> On 12.01.2016 19:22, Vasiliy P. Melnik wrote:
> 
> >правильный ответ - не использовать NetworkManager
> 
> NetworkManager не используется.
> 
> >вопрос явно в том, что интерфейса просто нет в момент старта нгинкса
> 
> IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd:
> 
> http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html
> 
> на мой взгляд, проблема в systemd в первую очередь,
> и во-вторую очередь в unit-файле nginx. В документе
> http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
> подробно написано как работает network.target и как надо было бы
> переписать nginx чтобы он стал совместимым с systemd и network.target

Я не большой специалист по systemd, но лично мне представляется, 
что проблема в первую очередь в том, что unit-файл - один.  А 
nginx в зависимости от настроек - может иметь очень разные 
требования для запуска.  Вплоть до требования наличия трезвого 
администратора за консолью, способного вспомнить пароль от ключа.

-- 
Maxim Dounin
http://nginx.org/

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Gena Makhomed

On 12.01.2016 19:22, Vasiliy P. Melnik wrote:


правильный ответ - не использовать NetworkManager


NetworkManager не используется.


вопрос явно в том, что интерфейса просто нет в момент старта нгинкса


IP нет. я даже патч предлагал для решения этой проблемы nginx+systemd:

http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html

на мой взгляд, проблема в systemd в первую очередь,
и во-вторую очередь в unit-файле nginx. В документе
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
подробно написано как работает network.target и как надо было бы
переписать nginx чтобы он стал совместимым с systemd и network.target

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Vasiliy P. Melnik
правильный ответ - не использовать NetworkManager, вопрос явно в том, что
интерфейса просто нет в момент старта нгинкса

12 января 2016 г., 15:15 пользователь Gena Makhomed  написал:

> 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
>> ?
>>
>
> этот костыль не работает. но помог другой костыль -
> везде прописать "listen 443" и "listen 80" вместо явного указания IP.
>
> это баг или фича?
>
> если фича - то может быть тогда имеет смысл поправить
> документацию, что на CentOS 7.2 где systemd нельзя в директиве
> listen указывать IP, потому что в этом случае nginx не запустится.
>
> или какой тут правильный вариант действий для пользователей nginx ?
>
> --
> Best regards,
>  Gena
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2016-01-12 Пенетрантность Gena Makhomed

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
?


этот костыль не работает. но помог другой костыль -
везде прописать "listen 443" и "listen 80" вместо явного указания IP.

это баг или фича?

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

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

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-30 Пенетрантность Gena Makhomed

On 28.12.2015 14:45, Konstantin Pavlov wrote:


Попробуйте костыль из

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

Есть патч:

http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007730.html

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-28 Пенетрантность Gena Makhomed

On 28.12.2015 14:45, Konstantin Pavlov wrote:


Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance
web server...
Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service...
Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down
networking...
Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file
/etc/nginx/nginx.conf syntax is ok
Dec 24 18:55:18 hroniky-com nginx: 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

?


В документе
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
есть рекомендация использовать network-online.target
тогда проблем с nginx не будет - сеть будет поднята:

$ diff -u nginx.service.old nginx.service
--- nginx.service.old   2015-12-09 17:04:13.0 +0200
+++ nginx.service   2015-12-28 15:06:43.024818287 +0200
@@ -1,8 +1,8 @@
 [Unit]
 Description=nginx - high performance web server
 Documentation=http://nginx.org/en/docs/
-After=network.target remote-fs.target nss-lookup.target
-
+After=network-online.target remote-fs.target nss-lookup.target
+
 [Service]
 Type=forking
 PIDFile=/run/nginx.pid
@@ -11,6 +11,7 @@
 ExecReload=/bin/kill -s HUP $MAINPID
 ExecStop=/bin/kill -s QUIT $MAINPID
 PrivateTmp=true
-
+
 [Install]
 WantedBy=multi-user.target
+


И это лучше, чем корежить систему кривыми настройками

systemctl enable NetworkManager-wait-online.service

systemctl enable systemd-networkd-wait-online.service

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-28 Пенетрантность Konstantin Pavlov
Hi,

On 25/12/2015 01:03, Gena Makhomed wrote:
> Здравствуйте!
> 
> Не запустился nginx при старте OpenVZ контейнера.
> 
> # cat /etc/redhat-release
> CentOS Linux release 7.2.1511 (Core)
> 
> Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance
> web server...
> Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service...
> Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down
> networking...
> Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file
> /etc/nginx/nginx.conf syntax is ok
> Dec 24 18:55:18 hroniky-com nginx: 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

?

-- 
Konstantin Pavlov

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-28 Пенетрантность Gena Makhomed

On 25.12.2015 15:25, denis wrote:


Проблема в том, что nginx запускается еще до того, как поднята сеть


такой глюк у меня наблюдается только в контейнерах OpenVZ
внутри которых используется CentOS 7.2 - возможно причина
проблем в OpenVZ или в комбинации OpenVZ + CentOS 7.2

на CentOS 7.2 без OpenVZ - кто-нибудь такие глюки наблюдает?


как костыль - выставить net.ipv4.ip_nonlocal_bind=1


пока буду пробовать писать "listen 80;" вместо явного указания IP.

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-25 Пенетрантность Gena Makhomed

On 25.12.2015 3:03, Gena Makhomed wrote:


Проблема в том, что nginx запускается еще до того, как поднята сеть:

Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance
web server...
Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service...
Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down
networking...
Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file
/etc/nginx/nginx.conf syntax is ok
Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to
172.23.23.161:80 failed (99: Cannot assign requested address)
Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file
/etc/nginx/nginx.conf test failed

Похоже, что запускается именно
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

А вот до ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
По условию After=network.target remote-fs.target nss-lookup.target
дело просто не доходит, поскольку тест конфига завершился с ошибкой.

Имхо было бы правильным не считать
nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign
requested address)

Ошибкой тестирования конфига:
nginx: configuration file /etc/nginx/nginx.conf test failed

Потому что при запуске nginx через systemd конфиг тестируется тогда,
когда еще сеть не поднята, согласно условий unit-файла nginx.service


Точнее, может быть добавить параметр командной строки -w:

 -q: suppress non-error messages during configuration testing
 -w: treat all errors as warnings

-w будет всегда завершать выполнение nginx -t с нулевым кодом возврата.

и только для systemd использовать именно этот новый параметр:

ExecStartPre=/usr/sbin/nginx -t -w -c /etc/nginx/nginx.conf

?

Или как лучше можно решить эту проблему с nginx/systemd race condition?

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-25 Пенетрантность denis

25.12.2015 4:03, Gena Makhomed пишет:

On 25.12.2015 0:51, Alex Vorona wrote:


Посмотрите когда в системе после запуска "Starting LSB: Bring
up/down networking..." появляется IP на интерфейсе на самом деле.


Проблема в том, что nginx запускается еще до того, как поднята сеть:


как костыль - выставить net.ipv4.ip_nonlocal_bind=1

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-24 Пенетрантность Gena Makhomed

On 25.12.2015 0:51, Alex Vorona wrote:


Посмотрите когда в системе после запуска "Starting LSB: Bring
up/down networking..." появляется IP на интерфейсе на самом деле.


Проблема в том, что nginx запускается еще до того, как поднята сеть:

Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance 
web server...

Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service...
Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down 
networking...
Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file 
/etc/nginx/nginx.conf syntax is ok
Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 
172.23.23.161:80 failed (99: Cannot assign requested address)
Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file 
/etc/nginx/nginx.conf test failed


Похоже, что запускается именно
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

А вот до ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
По условию After=network.target remote-fs.target nss-lookup.target
дело просто не доходит, поскольку тест конфига завершился с ошибкой.

Имхо было бы правильным не считать
nginx: [emerg] bind() to 172.23.23.161:80 failed (99: Cannot assign 
requested address)


Ошибкой тестирования конфига:
nginx: configuration file /etc/nginx/nginx.conf test failed

Потому что при запуске nginx через systemd конфиг тестируется тогда,
когда еще сеть не поднята, согласно условий unit-файла nginx.service

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-24 Пенетрантность Alex Vorona
С IPv6 попадался https://bugzilla.redhat.com/show_bug.cgi?id=1243958, но 
там хотя бы понятно почему на IP еще нельзя забиндиться -  init-скрипт 
IP добавил и вышел, но IP еще не успевает появиться на интерфейсе из-за 
IPv6 DAD. Посмотрите когда в системе после запуска "Starting LSB: Bring 
up/down networking..." появляется IP на интерфейсе на самом деле.


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

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

2015-12-24 Пенетрантность Gena Makhomed

Здравствуйте!

Не запустился nginx при старте OpenVZ контейнера.

Из-за "Starting LSB: Bring up/down networking..."

Возможно этот баг не специфичен для OpenVZ.

Как решить проблему?

Пакет с официального сайта:

# rpm -q nginx
nginx-1.9.9-1.el7.ngx.x86_64

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

# uname -a
Linux hroniky-com 2.6.32-042stab112.15 #1 SMP Tue Oct 20 17:22:56 MSK 
2015 x86_64 x86_64 x86_64 GNU/Linux


# cat /var/log/messages

Dec 24 18:55:14 hroniky-com systemd: Starting Sockets.
Dec 24 18:55:14 hroniky-com systemd: Reached target Basic System.
Dec 24 18:55:14 hroniky-com systemd: Starting Basic System.
Dec 24 18:55:14 hroniky-com systemd: Started D-Bus System Message Bus.
Dec 24 18:55:14 hroniky-com systemd: Starting D-Bus System Message Bus...
Dec 24 18:55:14 hroniky-com systemd: Starting Permit User Sessions...
Dec 24 18:55:14 hroniky-com systemd: Starting Postfix Mail Transport 
Agent...

Dec 24 18:55:14 hroniky-com systemd: Started OpenSSH Server Key Generation.
Dec 24 18:55:14 hroniky-com systemd: Starting /etc/rc.d/rc.local 
Compatibility...
Dec 24 18:55:15 hroniky-com systemd: Starting nginx - high performance 
web server...

Dec 24 18:55:18 hroniky-com systemd: Starting System Logging Service...
Dec 24 18:55:18 hroniky-com systemd: Starting LSB: Bring up/down 
networking...
Dec 24 18:55:18 hroniky-com nginx: nginx: the configuration file 
/etc/nginx/nginx.conf syntax is ok
Dec 24 18:55:18 hroniky-com nginx: nginx: [emerg] bind() to 
172.23.23.161:80 failed (99: Cannot assign requested address)
Dec 24 18:55:18 hroniky-com nginx: nginx: configuration file 
/etc/nginx/nginx.conf test failed
Dec 24 18:55:18 hroniky-com systemd: Starting The PHP FastCGI Process 
Manager...

Dec 24 18:55:18 hroniky-com systemd: Started OpenSSH server daemon.
Dec 24 18:55:18 hroniky-com systemd: Starting OpenSSH server daemon...
Dec 24 18:55:18 hroniky-com systemd: Starting Login Service...
Dec 24 18:55:18 hroniky-com systemd: Starting Dump dmesg to 
/var/log/dmesg...

Dec 24 18:55:18 hroniky-com systemd: Started Permit User Sessions.
Dec 24 18:55:18 hroniky-com systemd: Started /etc/rc.d/rc.local 
Compatibility.
Dec 24 18:55:18 hroniky-com systemd: nginx.service: control process 
exited, code=exited status=1
Dec 24 18:55:18 hroniky-com systemd: Failed to start nginx - high 
performance web server.
Dec 24 18:55:18 hroniky-com systemd: Unit nginx.service entered failed 
state.

Dec 24 18:55:18 hroniky-com systemd: nginx.service failed.


# cat /etc/systemd/system/multi-user.target.wants/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

--
Best regards,
 Gena

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru