Нет маршрута к порту 80, пока HTTPS работает

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

$ wget example.com
Connecting to example.com (example.com)|<IP_HERE>|:80... failed: No route to host.

Между тем, HTTPS работает нормально:

$ wget https://example.com
Connecting to example.com (example.com)|<IP_HERE>|:443... connected.

Конечно, в первую очередь я обратил внимание на конфигурацию брандмауэра и nginx. Однако ufw показывает порт 80 как уже открытый:

$ ufw allow http
Skipping adding existing rule
Skipping adding existing rule (v6)

...и логика перенаправления на HTTPS в моей конфигурации nginx кажется мне довольно хорошей:

listen 80; # managed by Certbot

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

if ($scheme != "https") {
    return 301 https://$host$request_uri;
} # managed by Certbot

Я также пробовал nmap -ing сервер (Ubuntu 16.04) как с самого компьютера ( nmap localhost ) и из внешнего местоположения ( nmap ). Удивительно, но HTTP вроде бы закрывается извне. Отключение брандмауэра тоже не помогло. netstat -lnp | grep "80" показывает мне, что nginx действительно прослушивает порт 80:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8845/nginx -g daemo

В журналах nginx ничего не написано.

Я не знаю, где еще искать. Я не могу точно определить эту проблему.

0
задан 16 January 2018 в 22:26
1 ответ

После перезапуска сервера я обнаружил, что что-то не так с nginx (я не мог его запустить).

Затем я просмотрел journalctl -xe и обнаружил, что в nginx отсутствует одна из зависимостей для отдельной конфигурации nginx ( php7.0-mbstring ), что мешает ему начиная. Странно то, что выполнение nginx -t и перезапуск nginx через systemd не обнаружили эту ошибку перед перезапуском.

После перезапуска я убедился, что установил недостающую зависимость PHP. Это заставило nginx правильно запуститься, и с этого момента HTTP-трафик перенаправлялся на HTTPS.

Я предполагаю, что суть этой проблемы заключается в том, что необходимо перезапустить некоторый процесс PHP (возможно, php7.0-fpm , Я действительно не знаком с экосистемой PHP), чтобы nginx заметил изменение зависимости,и что сочетание этих двух проблем привело к поистине неожиданным последствиям.

0
ответ дан 5 December 2019 в 06:48

Теги

Похожие вопросы