Apache 反向代理:将链接和表单目标中的协议从 http 更改为 https

Apache 反向代理:将链接和表单目标中的协议从 http 更改为 https

我有一个在 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。

相关内容