Я не могу понять, как это исправить. Всякий раз, когда я пытаюсь открыть веб-сайт по протоколу 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 ничего не написано.
Я не знаю, где еще искать. Я не могу точно определить эту проблему.
После перезапуска сервера я обнаружил, что что-то не так с nginx (я не мог его запустить).
Затем я просмотрел journalctl -xe
и обнаружил, что в nginx отсутствует одна из зависимостей для отдельной конфигурации nginx ( php7.0-mbstring
), что мешает ему начиная. Странно то, что выполнение nginx -t
и перезапуск nginx через systemd не обнаружили эту ошибку перед перезапуском.
После перезапуска я убедился, что установил недостающую зависимость PHP. Это заставило nginx правильно запуститься, и с этого момента HTTP-трафик перенаправлялся на HTTPS.
Я предполагаю, что суть этой проблемы заключается в том, что необходимо перезапустить некоторый процесс PHP (возможно, php7.0-fpm
, Я действительно не знаком с экосистемой PHP), чтобы nginx заметил изменение зависимости,и что сочетание этих двух проблем привело к поистине неожиданным последствиям.