nginx restart AND listen ip:port

imsystem nginx-forum на forum.nginx.org
Ср Фев 14 12:56:10 UTC 2018


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 и <ip>:80.
> 
> В результате если nginx уже запущен с listen на *:80, то написать 
> вместо него в конфигурации listen <ip>: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