WP за прокси-сервером nginx, главная страница застряла в цикле перенаправлений

Вопрос или проблема

У меня есть домашняя страница, застрявшая в петле 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 (обратный прокси на domain-a.com) и ServerB (основной сервер на domain-b.com). Проблема заключается в том, что домашняя страница не отображается корректно, но другие статические страницы работают без проблем, если к ним обращаться непосредственно по URL.

Причины зацикливания редиректов

1. Неверные настройки URL-адресов WordPress.
В вашей конфигурации указаны:

define('WP_HOME','https://domain-a.com');
define('WP_SITEURL','https://domain-a.com');

Эти параметры могут вызвать проблемы с редиректами, так как WordPress считает, что он должен находиться на domain-a.com, однако на самом деле он обрабатывает запросы на domain-b.com.

2. Конфигурация Nginx.
Проблема может быть вызвана неправильной обработкой заголовков, особенно X-Forwarded-Host и X-Forwarded-Proto. Без правильной обработки этих заголовков Nginx может неправильно интерпретировать итоговый URL, вызывая зацикливание.

Рекомендации по решению проблемы

1. Изменение настроек WordPress:
Попробуйте изменить параметры WP_HOME и WP_SITEURL в wp-config.php на:

define('WP_HOME','https://domain-b.com');
define('WP_SITEURL','https://domain-b.com');

Это позволит WordPress правильно обрабатывать редиректы и URL.

2. Обновление конфигурации Nginx:
Попробуйте изменить заголовки, которые передаются прокси-сервером. Ваша конфигурация выглядит правильно, но вам стоит добавить proxy_set_header X-Forwarded-Proto $scheme;, если это еще не сделано. Это должно помочь WordPress понять, что запрос поступает через HTTPS.

3. Проверка на наличие правил редиректа:
Убедитесь, что в вашем .htaccess файле (или в конфигурации Nginx) нет дополнительных правил редиректа, которые могут вызывать конфликты. Если у вас есть правила редиректа, временно отключите их и проверьте поведение.

4. Журналирование и мелкие настройки:
Добавьте следующие строки в вашу конфигурацию Nginx для улучшения диагностики:

error_log /var/log/nginx/error.log debug;

Это позволит вам увидеть более детальные сообщения об ошибках и, возможно, укажет на причину проблемы.

Резюме

Проблема с зацикливанием редиректов может быть вызвана неправильной конфигурацией URL-адресов в WordPress и конфигурации Nginx. Рекомендуется изменить параметры WP_HOME и WP_SITEURL, обновить конфигурацию Nginx, а также проверить правила редиректа. Если проблема сохраняется, рассмотрите возможность проведения дополнительной отладки, используя журналы ошибок.

Если у вас будут вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...