Вопрос или проблема
У меня есть этот код (который работает) в Plesk в Клиенты > Имя клиента > new-domain.com > Хостинг & DNS > Настройки Apache & nginx > Дополнительные директивы Apache (для обоих HTTP + HTTPS):
ProxyRequests On
SSLProxyEngine On
ProxyPass / https://old-domain.com/
ProxyPassReverse / old-domain.com/
Это означает, что сайт можно открыть по адресу new-domain.com
, и он будет отображать содержимое с old-domain.com
, при этом в строке адреса останется new-domain.com
.
Все относительные URL-адреса в HTML сайта работают идеально, однако есть тысячи абсолютных URL-адресов в HTML тоже – и щелчок по любому из них изменяет URL в строке адреса на old-domain.com
.
Я хотел бы использовать mod_substitute
для выполнения поиска и замены в HTML. Я попробовал добавить это на новой строке ниже приведенного кода:
Substitute "s/old-domain.com/new-domain.com/ni"
Но, похоже, это не дает результата – HTML не изменяется.
Как я могу заменить домен в абсолютных URL-адресах, используя прокси, в Plesk?
Пробовал
-
Удаление
"
с обеих сторон строки -
Изменение разделителя с
/
на|
-
Добавление этого выше строки
Substitute
:AddOutputFilterByType SUBSTITUTE text/html
-
Изменение строки
AddOutputFilterByType
на:AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html
-
Перенос строк
Substitute
+AddOutputFilterByType
в файл.htaccess
в верхнем каталоге для этого домена – куда бы пошелindex.html
(оставляя строки прокси в Директивах)
Также пробовал
-
В SSH:
yum install -y mod_proxy_html
-
Под строками
Proxy
, не использовать никакие строки замены, а вместо этого использовать:SetOutputFilter proxy-html ProxyHTMLURLMap https://old-domain.com /
-
Перенос этих строк в
.htaccess
(оставляя строки прокси в Директивах) -
Использование этих строк:
ProxyRequests off ProxyHTMLURLMap https://old-domain.com / RequestHeader unset Accept-Encoding
-
Изменение строки
SetOutputFilter
на:AddOutputFilterByType proxy-html text/html
-
Изменение строки
SetOutputFilter
на:SetOutputFilter INFLATE;proxy-html;DEFLATE
Проверки
Я проверил в Инструменты & Настройки > Настройки веб-сервера Apache, что следующие модули Apache включены: proxy_html
, proxy_http
, substitute
.
Я подтвердил с помощью httpd -M | grep substitute
и httpd -M | grep proxy_html
, что модули включены.
Прокси работает идеально, но что бы я ни пытался, я не могу заставить замену или карты URL иметь какое-либо влияние.
Я не вижу никаких записей в журнале, относящихся к какому-либо модулю.
Я использую последнюю версию Plesk (Plesk Obsidian Web Pro Edition, версия 18.0.64 обновление #1).
Я использую Apache httpd 2.4.37-65.module_el8.10.0+3874+c2064c23.2
.
Документация Apache
-
Из
mod_substitute
:Распространенный сценарий использования
mod_substitute
– это ситуация, когда фронтенд-сервер проксирует запросы к бэкенд-серверу, который возвращает HTML с жестко заданными встроенными URL, которые относятся к бэкенд-серверу. -
Из
mod_proxy
:Apache httpd не будет переписывать URL-ссылки внутри HTML-страниц. Это означает, что если проксируемое содержимое содержит абсолютные ссылки URL, они обойдут прокси. Чтобы переписать HTML-содержимое, чтобы оно соответствовало прокси, вы должны загрузить и включить
mod_proxy_html
. -
Из Сопоставление URL-адресов с файловыми системами:
Ссылки внутри документов не будут переписаны. Так что любые абсолютные ссылки на internal.example.com приведут к тому, что клиент выйдет из прокси-сервера и запрашивает напрямую с internal.example.com. Вы можете изменять эти ссылки (и другой контент) на странице, когда она обслуживается клиенту, с помощью
mod_substitute
. Для более сложного переписывания ссылок в HTML и XHTML также доступен модульmod_proxy_html
. Он позволяет создавать карты URL, которые необходимо переписать, чтобы можно было обрабатывать сложные сценарии проксирования.
Похожие вопросы
.
Ответ или решение
Вопрос использования mod_substitute
и mod_proxy_html
в среде Plesk с помощью модуля mod_proxy
является достаточно распространенной проблемой. Ваша ситуация выглядит следующим образом: вы настроили прокси-сервер на использование нового домена, перенаправляя запросы с new-domain.com
на old-domain.com
, однако ссылки внутри HTML-страниц, создаваемых сервером, по-прежнему ведут на старый домен. Давайте разберемся с возможными причинами и решениями данной проблемы.
Анализ проблемы
-
Работа прокси: Судя по вашему описанию, конфигурация прокси работает так, как задумывалось. Однако проблема возникает из-за того, что абсолютные ссылки на
old-domain.com
не подлежат замене при доступе черезnew-domain.com
. -
Модули Apache: Вы подтвердили, что модули
proxy_html
,proxy_http
иsubstitute
активны на вашем сервере. Это значит, что в теории вы должны иметь возможность заменить URL с помощью модулей Apache.
Решения
Давайте рассмотрим несколько шагов, которые вы можете предпринять для решения этой проблемы:
1. Использование mod_proxy_html
Убедитесь, что вы правильно используете mod_proxy_html
. Добавьте следующие строки в секцию дополнительных директив Apache:
SetOutputFilter proxy-html
ProxyHTMLURLMap https://old-domain.com /
Эти директивы должны быть размещены после всех строк ProxyPass
и ProxyPassReverse
. Они обеспечат, что все URL, которые ссылаются на старый домен, будут заменены на новые при передаче данных пользователю.
2. Проверка конфигурации
Убедитесь, что конфигурация Apache загружается без ошибок. Сделайте это с помощью команды:
apachectl configtest
Ошибки, если они присутствуют, могут предотвратить примененные изменения.
3. Логи Apache
Обязательно проверьте логи Apache на наличие ошибок. Это можно сделать с помощью команд:
tail -f /var/log/httpd/error_log
или
tail -f /var/log/apache2/error.log
4. Настройка фильтров вывода
Если проблема сохраняется, попробуйте изменить настройки фильтров вывода относительно сжатия и замены:
AddOutputFilterByType INFLATE;proxy-html;DEFLATE text/html
Это позволит избежать проблем с тем, как сервер обрабатывает и создает выходные данные.
5. Проверка на стороне клиента
Убедитесь, что в вашем браузере кеш отключен или очищен. Браузеры могут кэшировать старые версии страницы, что затрудняет отображение измененного контента.
Заключение
Ваша проблема заключается в том, что неработоспособные абсолютные URL-адреса из контента прокси-сервера не могут быть автоматически заменены на новые, что является частой трудностью при использовании прокси. Попробуйте предложенные шаги. В случае их неэффективности рассмотрите возможность использования сторонних решений для переадресации или переписывания URL, таких как реализация дополнительных скриптов на основе PHP или других языков при обработке сервером.
Если проблема остается нерешенной, возможно, вы получите полезные советы на форумах поддержки Apache или Plesk, где ваше конкретное окружение может быть более подробно обсуждено.