Apache mod_substitute и mod_html ничего не делают, используя mod_proxy в Plesk.

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

У меня есть этот код (который работает) в 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, которые необходимо переписывать, чтобы можно было обрабатывать сложные сценарии проксирования.


Похожие вопросы

Ответ или решение

Проблема, с которой вы столкнулись, связана с использованием модуля Apache mod_substitute и mod_proxy, а также с тем, что попытки осуществить замену абсолютных URL-адресов не приносят желаемого результата. Ваша конфигурация, где new-domain.com проксирует содержимое old-domain.com, верно отображает страницы, но абсолютные ссылки при этом ведут на старый домен. Давайте разберёмся, как правильно настроить вашу систему для достижения нужного эффекта.

1. Проверка конфигурации

Убедитесь, что все необходимые модули загружены. Вы утверждаете, что модули mod_proxy, mod_substitute и mod_proxy_html включены. Это первый и важный шаг. Проверьте их наличие с помощью команды:

httpd -M | grep proxy
httpd -M | grep substitute

2. Использование mod_proxy_html

Более целенаправленный подход для замены URL-адресов в HTML-коде, полученном через прокси, достигается с помощью модуля mod_proxy_html.

Попробуйте следующую конфигурацию:

ProxyRequests Off
SSLProxyEngine On
ProxyPass / https://old-domain.com/
ProxyPassReverse / old-domain.com/

AddOutputFilterByType proxy-html text/html
ProxyHTMLURLMap https://old-domain.com/ / 
ProxyHTMLURLMap / https://new-domain.com/
ProxyHTMLURLMap http://old-domain.com/ / 
ProxyHTMLURLMap / http://new-domain.com/

3. Обработка запросов

Убедитесь, что ProxyHTMLURLMap настроен правильно для всех возможных случаев URL. Важно указать как полные URL (с протоколом), так и относительные пути.

4. Использование mod_substitute

Если вы по-прежнему хотите попробовать mod_substitute, вот пример, который можно использовать после AddOutputFilter:

AddOutputFilterByType SUBSTITUTE text/html

Substitute "s|https://old-domain.com|https://new-domain.com|ni"
Substitute "s|http://old-domain.com|http://new-domain.com|ni"

5. Обратите внимание на порядок

Важно, чтобы директива AddOutputFilterByType шла перед командами замены. Apache обрабатывает фильтры в порядке их указания, и это влияет на результат.

6. Проверьте права на файлы

Убедитесь, что у веб-сервера есть права на чтение и выполнение необходимых файлов, что может препятствовать работе модулей.

7. Логи и отладка

Не забудьте проверить логи Apache на наличие ошибок. Логи могут дать подсказки о том, почему ваши замены не работают. Используйте команды:

tail -f /var/log/httpd/error_log

8. Тестирование

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

Заключение

Использование mod_proxy_html в сочетании с правильной настройкой Apache должно помочь вам успешно заменить абсолютные URL на нужные. Если все вышеперечисленные шаги не приводят к результату, возможно, потребуется пересмотреть стратегию блоков конфигурации или обратиться в техническую поддержку вашей хостинг-компании, чтобы убедиться, что нет других ограничений на уровне сервера.

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

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