我使用 apache mod_proxy 设置了反向代理:
<VirtualHost *:443>
ServerName reverse.server.com
ProxyPass / http://10.1.9.11:3000/
ProxyPassReverse / http://10.1.9.11:3000/
ProxyPreserveHost on
...snip ssl stuff...
</VirtualHost>
在大多数情况下,这种方法都行得通。问题是当内部服务器进行重定向时。虽然 proxypassreverse 应该能够捕获位置,而且似乎可以,但它会重定向到http://reverse.server.com而不是https://reverse.server.com。因此它只工作了一半,地址正确更改,但协议保持为内部服务器。
我不清楚它为什么这样做,因为代理连接是 SSL - 有什么想法吗?
答案1
ProxyPassReverse
无法修复此类重定向。有两种方法可以解决此问题:
- 对内部站点使用 HTTPS。例如
ProxyPass / https:...
和ProxyPassReverse / https:
(实际上,在您的情况下不需要最后一个)。 - 在反向代理中使用 mod_headers:
Header edit Location ^http: https:
- 在反向代理中使用 mod_rewrite 来更改重定向。
答案2
我刚刚遇到了同样的问题。我们找到了 2 个想法来尝试,不知道它是否真的有效:1/ 使用 RequestHeader 设置 X-Forwarded-Protocol "https" =>http://toroid.org/ams/etc/mixing-http-and-https
2/ 使用变量 httpsindicatorheader(它是 websphere)通过应用服务器指示初始请求是 https。然后每个重定向都将在 https 上