SSL-сертификаты Nginx / reverse proxy / HTTPS

SSL сайта: За обратным прокси появляется бесконечное перенаправление на HTTPS

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

После установки SSL на внешнем прокси браузер бесконечно переходит между HTTP и HTTPS. Обычно внешний прокси получает HTTPS, а внутренний сервер видит HTTP и снова пытается перенаправить запрос: важно передать доверенный исходный протокол.

В этой статье
  1. Что происходит и когда применима инструкция
  2. Основные причины и их признаки
  3. Пошаговая диагностика и устранение
  4. Проверка результата
  5. Если решить проблему не удалось

#Что происходит и когда применима инструкция

После установки SSL на внешнем прокси браузер бесконечно переходит между HTTP и HTTPS. Обычно внешний прокси получает HTTPS, а внутренний сервер видит HTTP и снова пытается перенаправить запрос: важно передать доверенный исходный протокол.

#Основные причины и их признаки

Возможная причинаКак узнатьЧто делать
Внутреннее приложение не знает о HTTPSЗаголовок исходной схемы не передан либо приложение его игнорирует.Логи показывают повторяющиеся 301/302 на тот же URLПроверьте X-Forwarded-Proto и доверенный прокси.
Конфликт правил перенаправленияОба звена имеют противоречащие правила канонического URL.Один уровень отправляет на HTTP, другой на HTTPSОставьте одно согласованное правило.
Некорректный режим CDNРежим шифрования между CDN и исходным сервером конфликтует с редиректами.Прокси подключается к origin по HTTP, origin требует HTTPSНастройте защищённый путь до origin.

#Пошаговая диагностика и устранение

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

#Проверка результата

HTTPS открывает конечную страницу без цикла, код ответа после ожидаемого перехода 200 или другой штатный код, приложение корректно определяет защищённую схему и прямые внешние запросы не могут подделать доверенные заголовки.

#Если решить проблему не удалось

Если редирект остаётся, сопоставьте Location с конкретным звеном: на каком сервере это правило срабатывает и кто его устанавливает. Не добавляйте ещё одно правило сверху — сначала найдите источник текущего перенаправления.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.