Я использую 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>