Назад | Перейти на главную страницу

Обратный прокси Apache, SSL на прокси, без SSL на бэкэнд-сервере, манипуляции со страницами

Я использую Apache2 в качестве прокси для нескольких backend-серверов. Прокси-сервер содержит сертификаты Let´s-Encrypt-SSL-Certificates для всех серверов, http-трафик перенаправляется на https, а затем проксируется на http-backend-серверы.

Все идет гладко, но:

На одном из бэкэнд-серверов выполняется установка Moodle. Каждая ссылка указывает на http-url, поэтому браузеры говорят, что есть небезопасный контент ...

Как я могу управлять содержимым страницы, который доставляется с бэкэнда через прокси клиенту? Придется заменять каждую ссылку "http://my.doimain.com/" с участием "https://my.domain.com/"на доставленных страницах ...

Трафик между прокси и сервером-сервером - это http, а не https. Поскольку эти серверы не имеют доступа в Интернет, они не могут обновлять сертификаты, выданные Let's encrypt ...

Заранее спасибо wepp

Два возможных подхода:

  • Установите сертификаты на внутренние серверы, чтобы они могли поддерживать https, а затем перенастройте веб-приложение для работы на внутреннем сервере HTTPS, чтобы оно создавало ссылки https при обращении к самому себе.
    Вам не нужен действующий сертификат, и вы можете обойтись самозаверяющим сертификатом на внутреннем сервере (ах), потому что по умолчанию mod_proxy_http не проверяет сертификат (см. SSLProxyVerify)

  • Вы можете переписать HTML-страницы, создаваемые вашим веб-приложением, и переписать любое вхождение http://www.example.com с участием mod_proxy_html и ProxyHTMLURLMap Директива. Базовый пример:

    ProxyHTMLURLMap http://internal2.example.com https://www.example.com
    

Спасибо HBruijn, вы указали мне правильное направление.

Вот все, что вам нужно, чтобы заставить это работать ...
В вашем VirtualHost-File добавьте после SSL-настроек:

<VirtualHost *:443>
...
...
ProxyPass / http://backend-server/
ProxyPreserveHost On

SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLExtended Off
ProxyHTMLInterp On
ProxyHTMLDoctype XHTML Legacy
ProxyPassReverse / http://backend-server/

ProxyHTMLURLMap http://external.server.address https://external.server.address

</VirtualHost>