Рейтинг:0

Nginx не прослушивает новые порты с перезагрузкой systemctl nginx после добавления конфигурации с новым портом

флаг vn

Не уверен, как быстро обобщить эту проблему, поэтому я распишу свой сценарий по пунктам:

  • Обычная базовая установка nginx
  • Я использую только https(443), поэтому я удалил всю конфигурацию http(80)
  • Когда вы запускаете nginx (или рестарт это), процесс, похоже, также прослушивает порт 80 (сс -тулп)
  • Когда я добавляю конфигурацию в /etc/nginx/сайты включены со слушателем на http(80), а затем;
  • Перезагрузите nginx, используя systemctl перезагрузить nginx (примечание: перезагрузить, а не перезапустить)
  • Не работает, как будто nginx все еще не прослушивает трафик на порту 80
  • Если я побегу systemctl перезапустить nginx это работает.

Я заметил это, потому что LetsEncrypt не смог обновить мои сертификаты. Изучив проблему, я заметил поведение, описанное выше.
Поскольку у меня не было конфигурации nginx, прослушивающей http (80), я думаю, что nginx просто не добавляет никаких слушателей или что-то в этом роде, когда я запускаю nginx (хотя порт 80 был занят nginx)
И если Certbot затем попытается обновить мои сертификаты, он добавит временную конфигурацию http (80) в каталог конфигурации nginx, за которой, предположительно, последует «перезагрузка» nginx, а не перезапуск (что ожидаемо и как должно)
Но так как nginx был начал без конфигурации http(80) он не обрабатывал трафик от LetsEncrypt к этой временной конфигурации задачи.
Мое решение было довольно простым: добавить базовый блок конфигурации http(80) в nginx только с вернуть 404; и перезапущен нгинкс. После этого Certbot заработал нормально и смог обновить все мои сертификаты.

Мне было интересно, является ли это ожидаемым поведением или это (известная) ошибка в Nginx.

Спасибо

Обновлять:

Версия nginx: nginx/1.18.0
Debian 11 (яблочко)
флаг cn
Вам нужно будет поделиться своей фактической конфигурацией, чтобы мы могли помочь с этим.
Jesse avatar
флаг vn
@ shearn89 не знаю, как моя конфигурация поможет. Поскольку сама конфигурация не кажется актуальной, проблема скорее связана с отсутствием конфигурации. Если у меня нет конфига, который слушает порт 80, и если я потом добавлю конфиг для порта 80 (неважно какой конфиг), то перезагрузка сервиса не выдает ошибки, но он тоже не слушает порт 80. Мне нужно перезапустить службу, прежде чем конфигурация заработает. Хотя обычно перезагрузки достаточно.
флаг cn
Вы говорите, что «удалили всю конфигурацию http(80)», а затем «добавили конфигурацию в…». Попытка угадать, как выглядит ваша конфигурация из вашего описания, сложна и подвержена ошибкам. Если вы добавите это к вопросу, мы сможем сказать вам, является ли это неправильной конфигурацией ошибки в Nginx.
Jesse avatar
флаг vn
Ну, проблема в том, что он не работает должным образом, когда я не предоставляю эту конфигурацию. С этой конфигурацией все работает, так что опять же, не знаю, как предоставление конфигурации поможет. Но, как я уже говорил в исходном посте, моя конфигурация — это просто возврат 404; слушать 80; имя сервера _; вернуть 404;
Рейтинг:0
флаг cn

Я не думаю, что это ошибка, я думаю, что это что-то не так с вашей стороны. Я не могу воссоздать вашу проблему.

Я развернул новый инстанс EC2 с Amazon Linux и установил nginx.

Закомментированный http-сервер, раскомментированный https и сгенерированные сертификаты:

# сервер {
# слушать 80;
# слушать [::]:80;
#        имя сервера  _;
# корень /usr/share/nginx/html;
#
# # Загрузить файлы конфигурации для блока сервера по умолчанию.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# местоположение = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# местоположение = /50x.html {
# }
# }

    сервер {
        слушать 443 ssl http2;
        слушать [::]:443 ssl http2;
        имя сервера  _;
        корень /usr/share/nginx/html;

        ssl_certificate "/etc/pki/nginx/cert.pem";
        ssl_certificate_key "/etc/pki/nginx/key.pem";
        ssl_session_cache общий: SSL: 1 м;
        ssl_session_timeout 10 м;
        # ssl_ciphers PROFILE=SYSTEM;
        # ssl_prefer_server_ciphers on;

        # Загрузить файлы конфигурации для блока сервера по умолчанию.
        включить /etc/nginx/default.d/*.conf;

        страница_ошибки 404 /404.html;
            местоположение = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            местоположение = /50x.html {
        }
    }

Сертификаты:

[root@ip-10-0-0-110 nginx]# ls -l /etc/pki/nginx/
всего 8
-rw-r--r-- 1 nginx nginx 2155 4 февраля 09:28 cert.pem
-rw-r--r-- 1 nginx nginx 3272 4 февраля 09:28 key.pem

Запустите сервер, и порт 80 не используется, а 443:

[root@ip-10-0-0-110 nginx]# ss -plunt | грэп ':80'
[root@ip-10-0-0-110 nginx]# ss -plunt | грэп ':443'
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* пользователи:(("nginx",pid=32264,fd=6),("nginx",pid=32262,fd=6),("nginx", pid=32205,fd=6))
tcp LISTEN 0 511 [::]:443 [::]:* пользователи:(("nginx",pid=32264,fd=7),("nginx",pid=32262,fd=7),("nginx ",pid=32205,fd=7))

Раскомментируйте HTTP и выполните systemctl перезагрузить nginx, и оба используются:

[root@ip-10-0-0-110 nginx]# vim /etc/nginx/nginx.conf
[root@ip-10-0-0-110 nginx]# systemctl перезагрузить nginx
[root@ip-10-0-0-110 nginx]# ss -plunt | грэп ':443'
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:* пользователи:(("nginx",pid=32288,fd=6),("nginx",pid=32287,fd=6),("nginx", pid=32205,fd=6))
tcp LISTEN 0 511 [::]:443 [::]:* пользователи:(("nginx",pid=32288,fd=7),("nginx",pid=32287,fd=7),("nginx ",pid=32205,fd=7))
[root@ip-10-0-0-110 nginx]# ss -plunt | грэп ':80'
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* пользователи:(("nginx",pid=32288,fd=13),("nginx",pid=32287,fd=13),("nginx", pid=32205,fd=13))
tcp LISTEN 0 511 [::]:80 [::]:* пользователи:(("nginx",pid=32288,fd=14),("nginx",pid=32287,fd=14),("nginx ",pid=32205,fd=14))
[root@ip-10-0-0-110 nginx]#

Закомментируйте и перезагрузите снова, слушает только 443.

Установленная версия:

[root@ip-10-0-0-110 nginx]# список ням nginx
Загруженные плагины: extras_suggestions, langpacks, Priorities, update-motd
Установленные пакеты
nginx.x86_64 1:1.20.0-2.amzn2.0.4
Jesse avatar
флаг vn
Ах, забыл упомянуть мою версию: «версия nginx: nginx/1.18.0» в Debian 11. Проверю, смогу ли я воспроизвести ее при новой установке. Возможно это решено в 1.20

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.