Nginx Linux

Nginx: ERR_TOO_MANY_REDIRECTS — цикл редиректов http/https и www

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

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

Найдите петлю редиректов в конфиге и CMS, проверьте Cloudflare и proxy.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Диагностика цепочки
  5. Типичная причина: Cloudflare или балансировщик
  6. Правильный шаблон редиректов в nginx
  7. Чем ещё вызывается

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

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

ERR_TOO_MANY_REDIRECTS означает, что браузер ходит по кругу: сервер отвечает редиректом на адрес, который снова перенаправляет назад. Для сайта на nginx типичный сценарий — правило http→https или www→без www конфликтует с другим слоем (Cloudflare, балансировщик, приложение).

Чтобы найти петлю, не гадайте: проследите цепочку редиректов из консоли.

Команда curl -IL https://example.com покажет каждый шаг с заголовком Location.

Найдите петлю редиректов в конфиге и CMS, проверьте Cloudflare и proxy.

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

Возможная причинаКак узнатьЧто делать
Двойной редиректКонфиг.Проявляется как «Слишком много перенаправлений» или близкий по смыслу сбой.Уберите.
CloudflareFlexible SSL.Проявляется как «Слишком много перенаправлений» или близкий по смыслу сбой.Full.
ProxyЗаголовки.Проявляется как «Слишком много перенаправлений» или близкий по смыслу сбой.Передайте X-Forwarded-Proto.
CMSНастройка.Проявляется как «Слишком много перенаправлений» или близкий по смыслу сбой.Исправьте URL.

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

  1. Проследите цепочку редиректовНа своём компьютере откройте Терминал/PowerShell с установленным curl и выполните curl -IL --max-redirs 10 https://example.com, заменив домен своим. Запишите последовательность ответов HTTP/1.1 301/302 и заголовков Location, особенно чередование http/https или www/без www. Проверьте все четыре исходных адреса отдельно, поскольку цикл может затрагивать лишь один вариант.
  2. Найдите все редиректы в конфигурацииАдминистратор через SSH выполняет sudo nginx -T 2>&1 | grep -nE "return 30[1278]|rewrite|server_name", затем открывает реальные файлы конфигурации соответствующих server и location. Сравните редиректы Nginx, .htaccess у Apache, настройки приложения и CDN; одна и та же смена схемы на разных уровнях часто образует цикл. Сохраните копии до исправления.
  3. Проверьте режим SSL у проксиЕсли перед сайтом Cloudflare или другой прокси, проверьте в её панели режим подключения к исходному серверу и наличие правильного сертификата у исходного сервера. В Cloudflare «Flexible» вместе с принудительным HTTPS на сервере часто создаёт цикл; режим Full (strict) допустим только при корректном сертификате на origin. Не меняйте режим вслепую без проверки доступности backend.
  4. Исправьте блоки serverВыберите один канонический адрес (например, https://example.com) и настройте перенаправление HTTP и лишнего имени хоста ровно один раз. В HTTPS-блоке Nginx для целевого имени должен работать сайт без повторной отправки на тот же адрес. Если WordPress хранит другой home/siteurl, исправьте его отдельно после резервной копии; правила разных серверов не должны перенаправлять друг на друга.
  5. Проверьте и перезагрузите nginxВыполните sudo nginx -t, затем при успешном тесте sudo systemctl reload nginx. Снова проверьте цепочку curl -IL и откройте сайт в приватном окне браузера; кэшированные постоянные редиректы могут остаться в обычном профиле. Если цикл виден только через CDN, повторите диагностику с выключенным кэшем CDN или по согласованному способу тестирования origin.

#Диагностика цепочки

Выполните curl -sIL -o /dev/null -w "%{url_effective} %{num_redirects}\n" https://example.com и curl -IL http://example.com. Если один и тот же адрес повторяется — петля найдена. Посмотрите также nginx -T | grep -n "return 301\|rewrite", чтобы увидеть все редиректы в конфигурации.

#Типичная причина: Cloudflare или балансировщик

Если перед nginx стоит прокси, который терминирует TLS, то до nginx запрос приходит по HTTP, а nginx снова отправляет его на HTTPS — бесконечно. Решения: в Cloudflare выберите режим SSL «Full (strict)», а не «Flexible»; либо проверяйте заголовок схемы: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } вместо безусловного редиректа. Приложению (PHP, Laravel, WordPress) тоже нужно знать, что оно за прокси: передайте fastcgi_param HTTPS on; или X-Forwarded-Proto.

#Правильный шаблон редиректов в nginx

Отдельные блоки server: первый для порта 80 с return 301 https://example.com$request_uri;, второй для 443 с server_name www.example.com; return 301 https://example.com$request_uri; для www и основной блок для example.com. Избегайте rewrite ^ https://$host$request_uri permanent; внутри блока 443. Проверьте синтаксис nginx -t и примените systemctl reload nginx.

#Чем ещё вызывается

Редиректы одновременно в .htaccess или коде CMS и в nginx; кэш браузера (301 запоминается — проверяйте в режиме инкогнито или очистите кэш); редирект на страницу логина, которая сама требует логин из-за неработающих cookie (проверьте Set-Cookie, домены и флаг Secure).

Linux · Терминал (Bash)КомандаНужен sudo
Показывает конечный адрес и число редиректов; затем проверка и перезагрузка конфигурации.
curl -sIL -o /dev/null -w "%{url_effective} redirects=%{num_redirects}\n" http://example.com
sudo nginx -t && sudo systemctl reload nginx

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

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

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