我使用 Apache2 作为多个后端服务器的代理。代理保存所有服务器的 Let´s-Encrypt-SSL 证书,http 流量重定向到 https,然后代理到 http 后端服务器。
一切进展顺利,但是:
其中一个后端服务器包含一个 Moodle 安装。每个链接都指向 http-url,因此浏览器会说,其中存在不安全的内容……
我怎样才能操纵页面内容,即从后端通过代理传送到客户端?我必须替换每个链接”http://my.doimain.com/“ 和 ”https://my.domain.com/“在交付的页面内……
代理和后端服务器之间的通信是 http,而不是 https。由于这些服务器无法访问互联网,因此它们无法更新 let's encrypt 颁发的证书...
提前感谢 wepp
答案1
两种可能的方法:
在后端服务器上安装证书,以便它们可以支持 https,然后重新配置 Web 应用程序以在 HTTPS 后端上运行,以便它在引用自身时生成 https 链接。
您不需要有效的证书,可以使用后端服务器上的自签名证书,因为默认情况下 mod_proxy_http 不会检查证书(请参阅SSLProxyVerify
)您可以重写 Web 应用程序生成的 HTML 页面,并重写任何出现
http://www.example.com
的mod_proxy_html和ProxyHTMLURLMap
指示一个基本的例子是:ProxyHTMLURLMap http://internal2.example.com https://www.example.com
答案2
谢谢 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>