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


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

.

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

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

Анализ проблемы

  1. Работа прокси: Судя по вашему описанию, конфигурация прокси работает так, как задумывалось. Однако проблема возникает из-за того, что абсолютные ссылки на old-domain.com не подлежат замене при доступе через new-domain.com.

  2. Модули 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, где ваше конкретное окружение может быть более подробно обсуждено.

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

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