Apache ReverseProxy、代理上的 SSL、后端服务器上的 noSSL、页面操作

Apache ReverseProxy、代理上的 SSL、后端服务器上的 noSSL、页面操作

我使用 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.commod_proxy_htmlProxyHTMLURLMap指示一个基本的例子是:

    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>

相关内容