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

Обратный прокси-сервер Apache: изменить протокол в ссылках и сформировать цели с http на https

У меня http-служба работает на 10.1.1.187:8080.

Это предоставляется как общедоступная служба https для https://public.example.com что 10.1.1.186:443 через магию прокси-сервера apache:

<VirtualHost 10.1.1.186:443>
    ServerName public.example.com

    #Configure Reverse Proxy
    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://10.1.1.187:8080/
        ProxyPassReverse http://10.1.1.187:8080/

        Order allow,deny
        Allow from all
    </Location>

    #Define Virtual Host Specific SSL information.
    SSLEngine On
    SSLProxyEngine On
    SSLProxyProtocol all -SSLv2

    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

</VirtualHost>

Когда я вхожу https://public.example.com в моем браузере и щелкнув сертификат, я могу получить первую страницу, содержащую форму входа:

<form action="http://public.example.com/login" method="post">
  <--  ... contains username, password fields and a send button -->
</form>

Таким образом, цель действия была очень хорошо переписана. Но http должен читать https. Как это сделать?

Было бы неплохо, если бы ссылка была изменена в теге действия формы, указывая уже на правильную страницу https, вместо использования второго виртуального хоста http с условием перезаписи.

Редактировать:

Это дополнительная часть, которая решила это (я поместил ее в vhost, но за пределами контейнера Location):

SetOutputFilter proxy-html

# On: rewrite also css and javascript - Off: only in HTML
ProxyHTMLExtended Off
# Maybe this should be switched on

ProxyHTMLURLMap http://public.example.com https://public.example.com

Вы можете попробовать http://apache.webthing.com/mod_proxy_html/. Он предназначен для перезаписи URL-адресов в «ситуации с прокси».