#Что происходит и когда применима инструкция
После установки SSL на внешнем прокси браузер бесконечно переходит между HTTP и HTTPS. Обычно внешний прокси получает HTTPS, а внутренний сервер видит HTTP и снова пытается перенаправить запрос: важно передать доверенный исходный протокол.
#Основные причины и их признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Внутреннее приложение не знает о HTTPSЗаголовок исходной схемы не передан либо приложение его игнорирует. | Логи показывают повторяющиеся 301/302 на тот же URL | Проверьте X-Forwarded-Proto и доверенный прокси. |
| Конфликт правил перенаправленияОба звена имеют противоречащие правила канонического URL. | Один уровень отправляет на HTTP, другой на HTTPS | Оставьте одно согласованное правило. |
| Некорректный режим CDNРежим шифрования между CDN и исходным сервером конфликтует с редиректами. | Прокси подключается к origin по HTTP, origin требует HTTPS | Настройте защищённый путь до origin. |
#Пошаговая диагностика и устранение
- Зафиксируйте цепочку перенаправленийОткройте сайт в приватном окне; в инструментах разработчика «Сеть» включите сохранение журнала и посмотрите Location нескольких ответов 301/302. Так вы увидите, меняется ли схема или домен по кругу. Не очищайте cookies вслепую.
- Проверьте HTTP-цепочку командойС внешнего компьютера выполните запрос с ограниченным числом переходов и запишите каждый код и
Location. ПриMaximum redirects followedостановитесь; бесконечные запросы на боевом сервере не нужны. - Терминал с curl, без администратораLinux · Терминал (Bash)КомандаТерминал с curl, без администратора. Если HEAD запрещён, используйте GET c
-o /dev/nullи просматривайте заголовки.curl -IL --max-redirs 8 https://example.com/
- Нарисуйте схему завершения TLSВыясните, кто принимает HTTPS: CDN, Nginx, балансировщик или Apache. Посмотрите, каким протоколом прокси подключается к внутреннему узлу. Не переносите
listen 443в backend, если он должен принимать только HTTP от доверенного прокси.
- Проверьте передачу исходной схемыВ конфигурации внешнего Nginx проверьте
proxy_set_header X-Forwarded-Proto $schemeпри реальном HTTPS-клиенте. На backend этот заголовок должен учитываться только от известных адресов прокси; пользователь не должен подделывать его напрямую. - Фрагмент конфигурации Nginx, НЕ команда терминалаNginxФрагмент конфигурации Nginx, НЕ команда терминала. Вносите в нужный location после резервной копии и изучения наследования proxy_set_header.
proxy_set_header X-Forwarded-Proto $scheme;
- Проверьте настройки приложенияДля WordPress убедитесь, что постоянные адреса сайта согласованы с HTTPS и доверенным прокси; для другого движка найдите официальную настройку
trusted proxiesили исходного протокола. Не правьте исходники напрямую без тестовой копии.
- Устраните противоречащий редиректСделайте одно окончательное перенаправление HTTP→HTTPS на публичной границе либо согласованную политику между уровнями. Не отключайте HTTPS на стороне посетителя ради обхода петли. Сохраните старые правила для отката.
- Проверьте конфигурацию перед применениемДля сервера Nginx проверьте итоговый конфигурационный файл, затем перечитайте его штатным способом. При ошибке проверки не применяйте изменения; верните предыдущую версию.Linux · Терминал (Bash)КомандаНужен sudoКоманда Linux с Nginx; проверяет синтаксис, не применяет изменения.
sudo nginx -t
- Проверьте с разных начальных URLПовторите тест с http:// и https://, с www и без www (если поддерживаются). Ожидайте максимум несколько обоснованных переходов к одной странице. Проверьте авторизацию, формы и обратные вызовы приложения.
#Проверка результата
HTTPS открывает конечную страницу без цикла, код ответа после ожидаемого перехода 200 или другой штатный код, приложение корректно определяет защищённую схему и прямые внешние запросы не могут подделать доверенные заголовки.
#Если решить проблему не удалось
Если редирект остаётся, сопоставьте Location с конкретным звеном: на каком сервере это правило срабатывает и кто его устанавливает. Не добавляйте ещё одно правило сверху — сначала найдите источник текущего перенаправления.