Geo*_*rge 8 ssl mod-proxy redirect apache-2.2
我有一个奇怪的设置。它看起来像这样:
Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
HTTPS HTTP AJP
Run Code Online (Sandbox Code Playgroud)
在 HTTPS 代理(一个非常愚蠢的代理)上,一个 URL 看起来像 https://proxy.domain.com/app。然后它使用 HTTP 隧道传输到 Apache,就像 http://apache.domain.com/app(传入主机 proxy.domain.com)。Apache 然后使用 AJP 协议在本地将请求通过隧道传输到 ajp://localhost:8009/app/。
有时应用服务器想要重定向请求的路径。例如,将 /app/ 重定向到 /app/webapp。因此,它将 302 发送回重定向路径的 apache - 可能类似于 ajp: //localhost:8009/app/webapp。Apache 然后将重定向 URL 重写为 http://proxy.domain.com/app/webapp。HTTPS 代理很笨,所以它不会分析重定向并将 http 更改为 https。
所以,我想弄清楚我是否可以配置 Apache 来重写 302 重定向 URL 以将用户发送到 https。
这是我目前在 Apache 的 https.conf 中的配置:
ProxyPreserveHost on
RewriteEngine on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Run Code Online (Sandbox Code Playgroud)
我尝试使用ProxyPassReverse,但无法弄清楚如何强制它使用 https 而不是 http 重写 302 重定向 URL。
有什么想法吗?
在放弃并发布问题之前,我总是与问题搏斗数小时 - 只是在发布后几分钟解决我自己的问题......
对于那些感兴趣的人,解决方案不是使用ProxyPassReverse,而是使用Header指令 - 它会让你弄乱出站标头。在这种情况下,我可以捕获 Location 响应标头并在其上运行正则表达式以修复 URL 的协议:
ProxyPreserveHost on
RewriteEngine on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Header edit Location ^http(\:\/\/proxy.*)$ https$1
Run Code Online (Sandbox Code Playgroud)
瞧!
如果 apache 抱怨,可能是 mod_headers 尚未启用: a2enmod headers
归档时间: |
|
查看次数: |
17306 次 |
最近记录: |