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