Я создал сертификат SSL с помощью Let's Encrypt.
Сертификат установлен, и на него есть ссылка в конфигурационном файле Apache.
Конфигурация Apache предоставляет ServerName (например, example.com) и ServerAlias (например, www.example.com). Оба они указаны в сертификате SSL, что подтверждается выводом certbot certificates
команда.
Конфигурация Apache также содержит перенаправление с HTTP на HTTPS.
RedirectMatch permanent ^/(.*) https://example.com/$1
Проблема в том, что перенаправление происходит только для псевдонима (www.example.com). Запросы к example.com приводят к простому ответу 200 OK.
Запрос на псевдоним:
$ curl -I www.example.com
HTTP/1.1 301 Moved Permanently
Date: Sun, 01 Mar 2020 19:13:57 GMT
Server: Apache/2.4.29 (Ubuntu)
Location: https://example.com/
Content-Length: 325
Content-Type: text/html; charset=iso-8859-1
Запрос фактического значения ServerName:
curl -I example.com
HTTP/1.1 200 OK
Date: Sun, 01 Mar 2020 19:16:43 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Sun, 23 Feb 2020 00:03:31 GMT
ETag: "2aa6-59f32fc296ba5"
Accept-Ranges: bytes
Content-Length: 10918
Vary: Accept-Encoding
Content-Type: text/html
В <VirtualHost *:80>
и <VirtualHost *:443>
разделы конфигурационного файла идентичны, за исключением перенаправления в разделе *: 80 и строк SSL в разделе *: 443:
SSLCertificateFile /etc/letsencrypt/live/example/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Я упустил что-то очевидное или я просто заблудился? :-) Спасибо
Догадаться! :-) Размещать здесь ответ на случай, если какая-нибудь другая бедняжка совершит ту же ошибку, что и я.
Оказывается, был <VirtualHost *:80>
вход в 000-default.conf
с тем же именем сервера (ServerName example.com
). В 000-default.conf
файл не включает директивы конфигурации SSL.
Похоже, что если то же самое ServerName
отображается в нескольких включенных конфигурационных файлах Apache, приоритет которых не определен.
Я просто изменил ServerName
директива в 000-default.conf
чтобы включить имя хоста и перезапустить Apache. Задача решена.