这真是让我很头疼啊!
首先,有一个可以更有效地解释此事的模式:
------WWW / Internet--||-------------Intranet---------------
+----------+ +----------+ HTTP +----------+
| | | SSL | ---------> | Web 3. |
| Client | 1. | reverse | 2. | App |
| | ---------> | Proxy | | Server |
+----------+ HTTPS +----------+ +----------+
- 客户端通过 SSL 请求反向代理。
- 反向代理将协议切换为http并转发请求数据包(ProxyPreserveHost开启)
- 应用服务器根据请求标头“主机”变量生成静态链接。使用 FQDN 和协议 (http://FQDN.tld:80/etc):-( 您知道当我摆弄标头主机变量时应用服务器会回答什么……(错误请求)
- 之后,反向代理通过 SSL 将响应发送给客户端。
- 客户端自然会通过 http 请求所有链接的图像和样式表。此请求会询问反向代理,但会被置若罔闻。
解决方案不是欢迎:
- 内联网内的 SSL(安全性、性能和较少的调试选项)
- Appserver 不可修改(不可讨论)
- mod_proxy_html(表现,DOM解析器破坏了许多JS)
- Internet 区域不允许 http 通信(安全)
一切正常,只有协议切换会给静态链接带来麻烦。重定向由 ProxyPassReverse 管理,但这不会影响静态链接。
我该如何管理静态链接通过 https?
如果可以删除协议和附加的端口号就足够了!
是否有人需要更多信息我会在这里提供:
代理是 apache 2.2.17!
AppServer 是 jboss 和 tomcat 5.5!
非常感谢亨德里克
答案1
在server.xml中设置proxyName和proxyPort,将scheme设置为“https”。参见:http://tomcat.apache.org/tomcat-5.5-doc/config/http.html