Я решил проблему, не понимая ее.
На моем сервере есть семь веб-сайтов, и шесть из них работают правильно (http перенаправляет на https, как и ожидалось).
Все семь сайтов содержат блок в конце файлов конфигурации NginX, похожий на этот:
сервер {
# перенаправляет трафик с http на https для каждого релевантного домена
если ($host = svija.love) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
# гарантирует, что любые пойманные запросы не будут непреднамеренно перенаправлены
слушать 80;
имя_сервера svija.love;
вернуть 404; # под управлением Certbot
}
Фактический хост сервера live.svija.love, но сайт, на котором возникли проблемы, просто svija.love (нет веб-сайта, настроенного для live.svija.love).
Стало очевидно, что проблема была вызвана неправильной оценкой следующей строки:
если ($host = svija.love) {
В скобках не было конфигурации IPv6 для сервера (live.svija.love) и была конфигурация IPv6 для веб-сайта (svija.love), которой не должно было быть.
Я добавил запись IPv6 для сервера и удалил ее для веб-сайта.
На проблему это не повлияло.
Тогда я подумал, что, возможно, $хост переменная была установлена в live.svija.love (кто знает почему), поэтому я попробовал тест, где я изменил
если ($host = svija.love) {
к
если ($host = live.svija.love) {
Как и ожидалось, стандартная страница NginX была заменена ошибкой 404 (см. блок конфигурации выше).
Итак, я положил обратно
если ($host = live.svija.love) {
и все теперь работает корректно. HTTP-запросы к svija.love перенаправляются на https://svija.love и моя проблема решена.
Я предполагаю, что в NginX был какой-то механизм кэширования DNS, который не работал, возможно, из-за того, что я изменил имя сервера в какой-то момент в прошлом.