Nginx Linux

Nginx: ERR_TOO_MANY_REDIRECTS — цикл перенаправлений

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

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

ERR_TOO_MANY_REDIRECTS на сайте с nginx возникает из-за цикла редиректов: конфликт правил http→https и www, прокси без заголовка X-Forwarded-Proto, редирект в CMS или режим Flexible в Cloudflare. Найдите цикл через curl -IL.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Примеры

#Что означает ошибка

Сообщение
Слишком много перенаправлений

Браузер следует за редиректами не более 20 раз. Если адрес A перенаправляет на B, а B снова на A, возникает бесконечный цикл, и браузер прекращает попытки. Чаще всего цикл создают два слоя, каждый из которых «исправляет» адрес: например, nginx отправляет на HTTPS, а приложение за прокси думает, что запрос идёт по HTTP, и отправляет обратно.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Конфликт правилНесколько return 301 или rewrite перенаправляют друг на друга.curl -IL показывает повторяющиеся адреса.Оставьте одно правило на каждый тип редиректа.
Прокси без заголовкаBackend не знает, что исходный запрос был HTTPS.Приложение за nginx постоянно редиректит на HTTPS.Передайте X-Forwarded-Proto.
Редирект CMSWordPress/Bitrix с неверным siteurl перенаправляет на другой адрес.Цикл только на уровне приложения.Проверьте siteurl и home.
Cloudflare FlexibleCloudflare обращается к серверу по HTTP, а сервер редиректит на HTTPS.Cloudflare включён в режиме Flexible.Переключите на Full (strict).

#Пошаговое решение

  1. Найдите циклНа компьютере откройте терминал и выполните curl -IL --max-redirs 10 https://имя_домена, указав свой домен. Сравните заголовки Location в цепочке: повторение http↔https, www↔без www или двух путей покажет конкретную петлю.
  2. Проверьте конфигурацию nginxАдминистратор через SSH выполните sudo nginx -T 2>&1 | grep -nE "return 30[1278]|rewrite|server_name" и проверьте все правила для домена. Сохраните исходную конфигурацию и отдельно посмотрите редиректы в CMS и .htaccess Apache, если сайт проксируется.
  3. Передайте протокол на backendЕсли Nginx стоит перед приложением, убедитесь, что оно получает корректную схему через настроенный доверенный X-Forwarded-Proto, а не считает HTTPS-запрос HTTP. Этот заголовок следует принимать только от своего прокси; безусловно доверять заголовку клиента небезопасно.
  4. Исправьте приложениеВ панели CMS проверьте базовый URL и включённые принудительные перенаправления. Для WordPress — «Настройки → Общие» и возможные WP_HOME/WP_SITEURL; для другого движка — его штатные настройки. Не меняйте адрес в базе без копии: вход в админку может сломаться.
  5. Проверьте CloudflareЕсли используется Cloudflare, проверьте SSL/TLS-режим и Origin-сертификат; режим Flexible с принудительным HTTPS на исходном сервере часто вызывает цикл. Перевод на Full (strict) безопасен только при действующем сертификате на origin; сначала подтвердите это.
  6. Очистите cookie и кэшПосле исправления серверного редиректа откройте страницу в приватном окне браузера и очистите cookie только нужного домена при необходимости. Постоянный 301 может кэшироваться; не отключайте HTTPS, чтобы временно убрать петлю.
  7. Перезагрузите nginxСохраните конфигурацию Nginx, выполните sudo nginx -t и только затем sudo systemctl reload nginx. Проверьте четыре варианта домена и убедитесь, что цепочка заканчивается выбранным HTTPS-адресом и открывается нужная страница.

#Примеры

nginx.conf
Единственный редирект HTTP → HTTPS и передача схемы на backend.
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Linux · Терминал (Bash)КомандаНужен sudo
Проверка цепочки редиректов и конфигурации.
curl -I -L --max-redirs 10 https://example.com/
sudo nginx -T | grep -nE "return 30|rewrite"

Не комбинируйте редирект на уровне nginx, .htaccess и приложения для одного и того же правила — оставьте его в одном месте. Если сайт открывается как www и без www, выберите одну каноническую версию и настройте редирект с другой на неё один раз. Подробности — в документации nginx.

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

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

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