我有一个在 10.1.1.187:8080 上运行的 http 服务。
这是以公共 https 服务的形式提供给https://public.example.com即通过 apache 代理魔法访问的 10.1.1.186:443:
<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中但在位置容器之外):
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
答案1
你可以尝试http://apache.webthing.com/mod_proxy_html/。其目的是在“代理情况下”重写 URL。