- Вопрос или проблема
- Ответ или решение
- Решение проблемы: зацикливание перенаправлений на главной странице WordPress за Nginx обратным прокси
- Введение
- Анализ проблемы
- Симптомы:
- Конфигурация серверов
- Возможные причины проблемы
- Рекомендации по решению проблемы
- 1. Обновление конфигурации Nginx на ServerA
- 2. Проверка конфигурации на ServerB
- 3. Проверка перенаправлений
- 4. Очистка кэша
- 5. Рассмотрение других причин
- Заключение
Вопрос или проблема
У меня главная страница застряла в цикле 301 редиректов.
У меня есть два сервера. ServerA и ServerB.
serverA:
domain-a.com
использует обратный прокси nginx
ServerB:
domain-b.com
использует nginx
domain-a.com проксирует domain-b.com
Симптомы
-
Сайт настроен на отображение статической страницы. Если я меняю ее на отображение самых последних постов, они отображаются правильно.
-
Не имеет значения, какую статическую страницу я установил в качестве главной, ни одна из них не отображается корректно как главная страница.
-
Статические страницы отображаются вполне нормально, когда я просматриваю их напрямую (например, https://domain-a.com/home-page/)
-
Не имеет значения, какая тема активна, главная страница ведет себя одинаково.
Что я пробовал
-
Регенация постоянных ссылок
-
Отключение всех плагинов
Я использую domain-a.com для доступа к сайту WordPress. Если я меняю WP на отображение самых последних постов, они отображаются правильно.
Если я меняю постоянные ссылки на “Простые”, https://www.domain-a.com/?p=123, то главная страница работает хорошо, но мне нужен URL типа “название поста”.
Конфигурация обратного прокси nginx:
# ServerA Nginx
#PROXY-START/
location ^~ /
{
proxy_pass https://domain-b.com;
proxy_set_header Host domain-b.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
port_in_redirect off;
add_header X-Cache $upstream_cache_status;
#Установить кеш Nginx
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
expires 1m;
}
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 1m;
}
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
#PROXY-END/
//ServerB, wp-config.php
define('WP_HOME','https://domain-a.com');
define('WP_SITEURL','https://domain-a.com');
Ответ или решение
Решение проблемы: зацикливание перенаправлений на главной странице WordPress за Nginx обратным прокси
Введение
Ваша проблема с зацикливанием перенаправлений на главной странице WordPress за Nginx обратным прокси — это распространённая и сложная задача, которая может возникнуть из-за неправильной настройки как на уровне веб-сервера (ServerA), так и на уровне WordPress (ServerB). Давайте рассмотрим возможные причины возникновения данной проблемы и пути её решения.
Анализ проблемы
Симптомы:
- Главная страница застревает в цикле перенаправлений (например, 301 редиректы).
- Стационарные страницы корректно отображаются только при прямом доступе (например,
https://domain-a.com/home-page/
). - При выборе отображения последних записей на главной странице они показываются корректно.
- Изменение плагинной структуры и генерация постоянных ссылок не решает проблему, за исключением использования "Plain".
Конфигурация серверов
Согласно предоставленной информации, у вас есть два сервера:
- ServerA: Nginx как обратный прокси для ServerB
- ServerB: WordPress установлен на Nginx и обслуживает сайт
domain-b.com
, проксируемый наdomain-a.com
.
Возможные причины проблемы
-
Неправильные настройки прокси:
- Конфигурация Nginx на ServerA может неправильно интерпретировать запросы к WordPress на ServerB, что приводит к бесконечным перенаправлениям.
-
Настройки WordPress:
- Константы
WP_HOME
иWP_SITEURL
вwp-config.php
настроены наhttps://domain-a.com
, что может вводить в заблуждение WordPress относительно того, откуда он работает. Это может быть проблемой при использовании обратного прокси.
- Константы
-
Перегруженные правила перенаправления:
- В конфигурации Nginx могут отсутствовать правила для обработки перенаправлений, что приводит к зацикливанию при попытке доступа к статической домашней странице.
Рекомендации по решению проблемы
1. Обновление конфигурации Nginx на ServerA
Попробуйте скорректировать конфигурацию Nginx следующим образом:
location / {
proxy_pass https://domain-b.com;
proxy_set_header Host $host; # Модификация для центрирования на запрашиваемом домене.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
port_in_redirect off; # Чтобы предотвратить любые конфликты с перенаправлениями
}
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
# Дополнительные параметры кеширования можно оставить по вашему усмотрению.
2. Проверка конфигурации на ServerB
Убедитесь, что в файле wp-config.php
установлены правильные URL. Практика обычно предполагает указание поддомена или детализированного домена, если это необходимо:
define('WP_HOME','https://domain-b.com'); # Измените на домен ServerB
define('WP_SITEURL','https://domain-b.com'); # Измените на домен ServerB
3. Проверка перенаправлений
Используйте инструменты, такие как curl
или расширения для браузера, чтобы проверить http-заголовки и перенаправления, когда вы обращаетесь к главной странице. Это поможет выявить непреднамеренные 301 перенаправления.
4. Очистка кэша
Если у вас включено кеширование на одном из двух серверов, попробуйте очистить кэш. Кэшированные перенаправления могут причинять проблемы даже после изменений в конфигурации.
5. Рассмотрение других причин
- Убедитесь, что на ServerB в WordPress нет дополнительных конфигураций или плагинов, которые могут вызывать перенаправления.
- Также проверьте конфигурацию SSL, если SSL настроен неправильно, это может привести к нежелательным перенаправлениям.
Заключение
Проблема зацикливания перенаправлений в WordPress за Nginx обратным прокси может возникнуть из-за нескольких факторов, включая неправильные настройки проксирования и конфигурирования WordPress. Исполнение вышеуказанных рекомендаций должно помочь в диагностике и устранении проблемы.
Если проблема сохраняется, стоит также рассмотреть возможность использования инструментов для мониторинга и отладки, таких как nginx logs
и error logs
, которые могут предложить дополнительную информацию о том, что происходит на уровне сервера.