Вопрос или проблема
Мы управляем интернет-магазином example.com и сервером WordPress на wordpress.example.com
Сервер WordPress подключен к основному домену через обратный прокси.
ProxyPass /blog https://wordpress.example.com
ProxyPassReverse /blog https://wordpress.example.com
Это работает довольно хорошо. Но некоторые модули, например, AMP, не могут определить подкаталог.
Смотрите также этот вопрос на форуме WordPress:
https://wordpress.org/support/topic/relamphtml-url-with-proxy/#post-12228181
Каков правильный способ работы WordPress за таким прокси? Есть ли лучший способ настроить прокси или плагин?
Следующая настройка может сработать:
- на wordpress.example.com сделать так, чтобы Apache слушал также example.com
- поместить блог в тот же подпапку
- прокси-передача ProxyPass /blog https://wordpress.example.com
- ProxyPreserveHost On
Таким образом, REQUEST_URI, видимый с хоста WordPress, фактически будет реальным URL-адресом, который был запрошен с фронтального прокси.
Ответ или решение
Чтобы правильно настроить WordPress за обратным прокси-сервером и обеспечить корректное определение пути для всех расширений (например, для модуля AMP), важно учесть несколько технических моментов. В этой статье мы подробно рассмотрим необходимые шаги и основные настройки.
Понять контекст
У вас есть веб-магазин на домене example.com
, а WordPress-сервер работает на wordpress.example.com
. Для обеспечения доступа к WordPress через основной домен, вы используете конфигурацию обратного прокси. Однако некоторые модули (в частности, AMP) не могут корректно определять подкаталог, что может привести к неправильным URL-адресам и неожиданному поведению.
Шаги для настройки обратного прокси
-
Настройка Apache на
wordpress.example.com
Убедитесь, что ваш сервер Apache принимает запросы не только на поддомен
wordpress.example.com
, но и на основной доменexample.com
. Это можно сделать с помощью следующих директив:<VirtualHost *:80> ServerName wordpress.example.com ServerAlias example.com ... </VirtualHost>
-
Настройка ProxyPass
Ваша конфигурация Reverse Proxy выглядит следующим образом:
ProxyPass /blog https://wordpress.example.com ProxyPassReverse /blog https://wordpress.example.com
На этом этапе убедитесь, что вы также добавили
ProxyPreserveHost On
в свою конфигурацию. Эта директива позволяет прокси-серверу сохранять заголовок Host, что важно для корректного формирования URL-адресов:ProxyPreserveHost On
-
Использование правильного REQUEST_URI
Убедитесь, что
REQUEST_URI
, воспринимаемый WordPressом, соответствует реальному URL, запрашиваемому на фронте. Для этого вам может потребоваться убедиться, что WordPress настроен корректно:- Настройте WordPress для правильного использования URL. Перейдите в админ-панель WordPress и в разделе "Настройки" установите "Адрес WordPress (URL)" и "Адрес сайта (URL)" в:
https://example.com/blog
- Настройте WordPress для правильного использования URL. Перейдите в админ-панель WordPress и в разделе "Настройки" установите "Адрес WordPress (URL)" и "Адрес сайта (URL)" в:
-
Обработка путей в плагинах
Некоторые плагины могут использовать абсолютные пути. Чтобы убедиться, что они работают корректно, проверьте у них в настройках возможность добавления пути подкаталога (
/blog
). Если это невозможно, возможно потребуется внести изменения в код плагина или использовать фильтры, предоставляемые самим WordPress для изменения возвращаемых URL. -
Тестирование и отладка
После внесения всех изменений обязательно протестируйте сайт. Обратите внимание на следующие моменты:
- Все ссылки на странице корректно отражают новый путь.
- Функциональность плагинов, таких как AMP, работает без ошибок.
- Используйте инструменты разработчика в браузере для поиска проблем с CORS- и CSP-заголовками, которые могут возникнуть из-за конфигурации прокси.
Заключение
Настройка WordPress за обратным прокси-сервером требует тщательного внимания к деталям, особенно в части конфигурации путей и заголовков. Следуя вышеописанным рекомендациям, вы сможете обеспечить корректную работу всех модулей и плагинов. Удачи в вашей настройке!