У меня 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-адресов в «ситуации с прокси».