Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность Maxim Dounin
Hello!

On Wed, Feb 14, 2018 at 11:08:42AM -0500, imsystem wrote:

> Спасибо ещё раз, посмотрю примеры init конфигов, насколько мне известно он
> дефолтный.

Для systemd - лучше написать сразу service-файл, или взять из 
официальных пакетов.  Или же просто добавить отладочного вывода в 
существующий, и разобраться, что же там происходит.

> Но, вы забыли изначальную причину данной "проблемы", в одном случае
> конфигурации listen, init скрипт срабатывает как надо, а во втором что-то
> идёт не так.

Тут причин может быть масса, начиная от "просто повезло", и 
заканчивая "nginx ругался на ошибку, но init-скрипт всё спрятал".   
Для начала попробуйте добавить к start-stop-daemon параметр "--no-close".

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность imsystem
Спасибо ещё раз, посмотрю примеры init конфигов, насколько мне известно он
дефолтный.
Но, вы забыли изначальную причину данной "проблемы", в одном случае
конфигурации listen, init скрипт срабатывает как надо, а во втором что-то
идёт не так.

Maxim Dounin Wrote:
---
> Hello!
> 
> On Wed, Feb 14, 2018 at 09:58:28AM -0500, imsystem wrote:
> 
> > systemctl status nginx
> > 
> > ● nginx.service - LSB: starts the nginx web server
> >Loaded: loaded (/etc/init.d/nginx; generated; vendor preset:
> enabled)
> >   Drop-In: /etc/systemd/system/nginx.service.d
> >└─limits.conf
> >Active: failed (Result: exit-code) since Wed 2018-02-14 17:46:35
> MSK; 5s
> > ago
> >  Docs: man:systemd-sysv-generator(8)
> >   Process: 8890 ExecStop=/etc/init.d/nginx stop (code=exited,
> > status=0/SUCCESS)
> >   Process: 8892 ExecStart=/etc/init.d/nginx start (code=exited,
> > status=1/FAILURE)
> > Tasks: 0 (limit: 9830)
> >CGroup: /system.slice/nginx.service
> > 
> > Feb 14 17:46:35 gateway systemd[1]: Stopped LSB: starts the nginx
> web
> > server.
> > Feb 14 17:46:35 gateway systemd[1]: Starting LSB: starts the nginx
> web
> > server...
> > Feb 14 17:46:35 gateway nginx[8892]: Starting nginx:
> > Feb 14 17:46:35 gateway systemd[1]: nginx.service: Control process
> exited,
> > code=exited status=1
> 
> Судя по всему, init-скрипт после слов "Starting nginx:" ничего 
> более не пытался вывести, и при этом завершился с ошибкой.  Куда 
> он при этом потерял вывод самого nginx'а, и был ли он вообще - 
> надо разбираться собственно в init-скрипте.  Ищите там.
> 
> Отдельно отмечу, что тут хорошо видно, что секция "restart" в 
> init-скрипте никак не используется.  Для перезапуска systemd 
> сначала вызывает init-скрипт с параметром stop, а затем с 
> параметром start.  Это, в частности, с высокой вероятностью 
> приведёт к проблемам, если init-скрипт не дожидается собственно 
> завершения nginx'а, а просто отсылает сигнал и выходит.
> 
> [...]
> 
> -- 
> Maxim Dounin
> http://mdounin.ru/
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278548,278567#msg-278567

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность Maxim Dounin
Hello!

On Wed, Feb 14, 2018 at 09:58:28AM -0500, imsystem wrote:

> systemctl status nginx
> 
> ● nginx.service - LSB: starts the nginx web server
>Loaded: loaded (/etc/init.d/nginx; generated; vendor preset: enabled)
>   Drop-In: /etc/systemd/system/nginx.service.d
>└─limits.conf
>Active: failed (Result: exit-code) since Wed 2018-02-14 17:46:35 MSK; 5s
> ago
>  Docs: man:systemd-sysv-generator(8)
>   Process: 8890 ExecStop=/etc/init.d/nginx stop (code=exited,
> status=0/SUCCESS)
>   Process: 8892 ExecStart=/etc/init.d/nginx start (code=exited,
> status=1/FAILURE)
> Tasks: 0 (limit: 9830)
>CGroup: /system.slice/nginx.service
> 
> Feb 14 17:46:35 gateway systemd[1]: Stopped LSB: starts the nginx web
> server.
> Feb 14 17:46:35 gateway systemd[1]: Starting LSB: starts the nginx web
> server...
> Feb 14 17:46:35 gateway nginx[8892]: Starting nginx:
> Feb 14 17:46:35 gateway systemd[1]: nginx.service: Control process exited,
> code=exited status=1

Судя по всему, init-скрипт после слов "Starting nginx:" ничего 
более не пытался вывести, и при этом завершился с ошибкой.  Куда 
он при этом потерял вывод самого nginx'а, и был ли он вообще - 
надо разбираться собственно в init-скрипте.  Ищите там.

Отдельно отмечу, что тут хорошо видно, что секция "restart" в 
init-скрипте никак не используется.  Для перезапуска systemd 
сначала вызывает init-скрипт с параметром stop, а затем с 
параметром start.  Это, в частности, с высокой вероятностью 
приведёт к проблемам, если init-скрипт не дожидается собственно 
завершения nginx'а, а просто отсылает сигнал и выходит.

[...]

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность imsystem
systemctl status nginx

● nginx.service - LSB: starts the nginx web server
   Loaded: loaded (/etc/init.d/nginx; generated; vendor preset: enabled)
  Drop-In: /etc/systemd/system/nginx.service.d
   └─limits.conf
   Active: failed (Result: exit-code) since Wed 2018-02-14 17:46:35 MSK; 5s
ago
 Docs: man:systemd-sysv-generator(8)
  Process: 8890 ExecStop=/etc/init.d/nginx stop (code=exited,
status=0/SUCCESS)
  Process: 8892 ExecStart=/etc/init.d/nginx start (code=exited,
status=1/FAILURE)
Tasks: 0 (limit: 9830)
   CGroup: /system.slice/nginx.service

Feb 14 17:46:35 gateway systemd[1]: Stopped LSB: starts the nginx web
server.
Feb 14 17:46:35 gateway systemd[1]: Starting LSB: starts the nginx web
server...
Feb 14 17:46:35 gateway nginx[8892]: Starting nginx:
Feb 14 17:46:35 gateway systemd[1]: nginx.service: Control process exited,
code=exited status=1
Feb 14 17:46:35 gateway systemd[1]: Failed to start LSB: starts the nginx
web server.
Feb 14 17:46:35 gateway systemd[1]: nginx.service: Unit entered failed
state.
Feb 14 17:46:35 gateway systemd[1]: nginx.service: Failed with result
'exit-code'.
_
journalctl -xe

-- Unit nginx.service has finished shutting down.
Feb 14 17:49:14 gateway systemd[1]: Starting LSB: starts the nginx web
server...
-- Subject: Unit nginx.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit nginx.service has begun starting up.
Feb 14 17:49:14 gateway nginx[9378]: Starting nginx:
Feb 14 17:49:14 gateway systemd[1]: nginx.service: Control process exited,
code=exited status=1
Feb 14 17:49:14 gateway systemd[1]: Failed to start LSB: starts the nginx
web server.
-- Subject: Unit nginx.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit nginx.service has failed.
--
-- The result is failed.
Feb 14 17:49:14 gateway systemd[1]: nginx.service: Unit entered failed
state.
Feb 14 17:49:14 gateway systemd[1]: nginx.service: Failed with result
'exit-code'.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278548,278559#msg-278559

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность Maxim Dounin
Hello!

On Wed, Feb 14, 2018 at 07:56:10AM -0500, imsystem wrote:

> restart|force-reload)
> echo -n "Restarting $DESC: "
> start-stop-daemon --stop --quiet --pidfile \
> /var/run/$NAME.pid --exec $DAEMON
> sleep 1
> start-stop-daemon --start --quiet --pidfile \
> /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
> echo "$NAME."
> ;;
>   reload)
>   echo -n "Reloading $DESC configuration: "
>   start-stop-daemon --stop --signal HUP --quiet --pidfile
> /var/run/$NAME.pid \
>   --exec $DAEMON
>   echo "$NAME."
>   ;;
> 
> Ничего такого.
> 
> Спасибо подробный за ответ, но это явно не то, т.к. reload работал без каких
> либо ошибок, новая конфигурация подгружалась.

Значит разбирайтесь внимательно, что происходит при restart'е и 
почему он ломается.  Сам nginx при проблемах всегда пишет, в чём 
дело (и в лог, и в stderr), так что либо дело не в нём, а в 
init-скрипте, либо вы что-то упустили.  В частности, после того, 
как restart сломается - загляните в "systemctl status nginx" и в 
"journalctl -xe".

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность imsystem
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
  reload)
  echo -n "Reloading $DESC configuration: "
  start-stop-daemon --stop --signal HUP --quiet --pidfile
/var/run/$NAME.pid \
  --exec $DAEMON
  echo "$NAME."
  ;;

Ничего такого.

Спасибо подробный за ответ, но это явно не то, т.к. reload работал без каких
либо ошибок, новая конфигурация подгружалась.


Maxim Dounin Wrote:
---
> Hello!
> 
> On Wed, Feb 14, 2018 at 04:56:42AM -0500, imsystem wrote:
> 
> > Здравствуйте. Обнаружил такую проблему(багу?).
> > При добавлении блока:
> > 
> > server {
> > listen ip:80 default_server;
> > server_name _;
> > return 301 https://mysite.com;
> > }
> > 
> > Перестаёт работать рестарт сервера.
> > Если же ip:80 заменить на просто порт 80, то команды service nginx
> restart
> > или systemctl restart nginx работают.
> > 
> > В обоих случаях команда nginx -t говорит, что всё хорошо, в логах
> > соответственно ничего нет.
> > Команды на старт/стоп работают в обоих случаях, т.е. я просто не
> могу
> > перезагрузить.
> 
> С учётом того, что restart - это фактически stop и следующий за 
> ним stop, либо у вас в service-файле для systemd написано что-то 
> странное, либо вы на самом деле путаете, и речь про reload.
> 
> С reload'ом на Linux'е имеется достаточно типичная проблема: в 
> отличие от других операционных систем, linux не позволяет 
> одновременно открыть listen-сокеты на *:80 и :80.
> 
> В результате если nginx уже запущен с listen на *:80, то написать 
> вместо него в конфигурации listen :80 и сделать reload - 
> нельзя, nginx не сможет создать новые listen-сокеты для новой 
> конфигурации, так как они конфликтуют с уже открытыми 
> listen-сокетами старой конфигурации.  В error log'е, заданном на 
> глобальном уровне, будет при этом что-то вроде:
> 
> 2018/02/14 15:32:52 [notice] 1672#1672: signal 1 (SIGHUP) received
> from 1762, reconfiguring
> 2018/02/14 15:32:52 [notice] 1672#1672: reconfiguring
> 2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed
> (98: Address already in use)
> 2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after
> 500ms
> 2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed
> (98: Address already in use)
> 2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after
> 500ms
> 2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed
> (98: Address already in use)
> 2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after
> 500ms
> 2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed
> (98: Address already in use)
> 2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after
> 500ms
> 2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed
> (98: Address already in use)
> 2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after
> 500ms
> 2018/02/14 15:32:52 [emerg] 1672#1672: still could not bind()
> 
> Соответственно nginx не сможет создать новую конфигурацию, и 
> продолжит работать со старой.
> 
> Если такое изменение в listen-сокетах действительно необходимо, то 
> следует сделать restart - то есть выключить nginx, и включить его 
> обратно.
> 
> -- 
> Maxim Dounin
> http://mdounin.ru/
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278548,278555#msg-278555

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность Maxim Dounin
Hello!

On Wed, Feb 14, 2018 at 04:56:42AM -0500, imsystem wrote:

> Здравствуйте. Обнаружил такую проблему(багу?).
> При добавлении блока:
> 
> server {
> listen ip:80 default_server;
> server_name _;
> return 301 https://mysite.com;
> }
> 
> Перестаёт работать рестарт сервера.
> Если же ip:80 заменить на просто порт 80, то команды service nginx restart
> или systemctl restart nginx работают.
> 
> В обоих случаях команда nginx -t говорит, что всё хорошо, в логах
> соответственно ничего нет.
> Команды на старт/стоп работают в обоих случаях, т.е. я просто не могу
> перезагрузить.

С учётом того, что restart - это фактически stop и следующий за 
ним stop, либо у вас в service-файле для systemd написано что-то 
странное, либо вы на самом деле путаете, и речь про reload.

С reload'ом на Linux'е имеется достаточно типичная проблема: в 
отличие от других операционных систем, linux не позволяет 
одновременно открыть listen-сокеты на *:80 и :80.

В результате если nginx уже запущен с listen на *:80, то написать 
вместо него в конфигурации listen :80 и сделать reload - 
нельзя, nginx не сможет создать новые listen-сокеты для новой 
конфигурации, так как они конфликтуют с уже открытыми 
listen-сокетами старой конфигурации.  В error log'е, заданном на 
глобальном уровне, будет при этом что-то вроде:

2018/02/14 15:32:52 [notice] 1672#1672: signal 1 (SIGHUP) received from 1762, 
reconfiguring
2018/02/14 15:32:52 [notice] 1672#1672: reconfiguring
2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed (98: 
Address already in use)
2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after 500ms
2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed (98: 
Address already in use)
2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after 500ms
2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed (98: 
Address already in use)
2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after 500ms
2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed (98: 
Address already in use)
2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after 500ms
2018/02/14 15:32:52 [emerg] 1672#1672: bind() to 127.0.0.1:80 failed (98: 
Address already in use)
2018/02/14 15:32:52 [notice] 1672#1672: try again to bind() after 500ms
2018/02/14 15:32:52 [emerg] 1672#1672: still could not bind()

Соответственно nginx не сможет создать новую конфигурацию, и 
продолжит работать со старой.

Если такое изменение в listen-сокетах действительно необходимо, то 
следует сделать restart - то есть выключить nginx, и включить его 
обратно.

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность imsystem
И совсем забыл.

nginx -V
nginx version: nginx/1.12.1
built by gcc 6.3.0 20170516 (Debian 6.3.0-18)
built with OpenSSL 1.1.1-dev  xx XXX 
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx/
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--user=www-data --group=www-data --with-threads --with-file-aio
--with-http_ssl_module --with-openssl=/home/sysadmin/src/openssl
--with-http_v2_module --with-http_realip_module --with-http_addition_module
--with-http_xslt_module --with-http_image_filter_module
--with-http_geoip_module --with-http_sub_module --with-http_dav_module
--with-http_flv_module --with-http_mp4_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_auth_request_module
--with-http_random_index_module --with-http_secure_link_module
--with-http_degradation_module --with-http_slice_module
--with-http_stub_status_module --with-stream --with-stream_ssl_module

uname -a
Linux gateway 4.9.0-4-amd64 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23)
x86_64 GNU/Linux

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278548,278550#msg-278550

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

Re: nginx restart AND listen ip:port

2018-02-14 Пенетрантность imsystem
Добавлю что nginx используется для проксирования на backend.
Два интерфейса внешний и локальный. Везде ip - внешний ip.
Для сайтов блоки:
server {
listen ip:80 ..
return ...
}
server {
listen ip:443 ..
...
}
Проксирование идёт по локалке.
Если принудительно не указывать ip в listen, то не проксируется.

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,278548,278549#msg-278549

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