Re: nginx restart AND listen ip:port
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
Спасибо ещё раз, посмотрю примеры 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
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
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
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
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
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
И совсем забыл. 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
Добавлю что 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