我在我的Google Cloud Platform HTTP负载均衡器上设置了端点终端设置,并将HTTPS设置为与后端通信的协议。
这意味着所有请求(HTTP或HTTPS)都是HTTPS到apache。这样做的问题是即使HTTPS
设置为on
,X-Forwarded-Proto
环境变量也会设置为http
。
我的所有研究和测试仅指向相反的情况(当HTTPS
on
通过X-Forwarded-Proto
规则https
时设置SetEnvIf X-Forwarded-Proto https HTTPS=on
到HTTPS
。
但是,当X-Forwarded-Proto
为http
时,我需要取消设置SSLOptions -StdEnvVars
。
我已尝试设置SetEnvIf
以及SetEnv
,UnsetEnv
和StdEnvVars
的多种组合。通过mod_rewrite设置它不是我的选择(我不知道它是否会起作用)。有关关闭HTTPS
的一个有趣的注意事项是,即使它关闭,除了SetEnvIf X-Forwarded-Proto http HTTPS=Off
SetEnvIf X-Forwarded-Proto http HTTPS=0
SetEnvIf X-Forwarded-Proto http !HTTPS
SetEnv HTTPS Off
SetEnv HTTPS 0
SetEnv HTTPS
UnsetEnv HTTPS
之外,所有与SSL相关的变量都消失了,我可以确认在我的任何配置文件中都没有设置它。
修改
我在服务器配置,vhost和htaccess中尝试过的一些指令示例:
foo
将这些指令与其他变量一起使用,包括像{{1}}这样的测试就可以了。
答案 0 :(得分:1)
将这些指令与其他变量一起使用,包括像foo这样的测试就可以了。
首先是一个想法(如果有人有更好的想法,很乐意撤回)
目标代理
Target proxies终止来自客户端的HTTP(S)连接 由一个或多个全局转发规则引用并路由 传入URL地图的请求。
代理设置HTTP请求/响应头,如下所示:
- 通过:
1.1 google
(请求和回复)X-Forwarded-Proto: [http | https]
(仅限请求)X-Forwarded-For: <client IP(s)>, <global forwarding rule external IP>
(仅限请求) 可以是以逗号分隔的IP地址列表,具体取决于客户端所在的中介附加的X-Forwarded-For条目 穿越。该部分的第一个元素 显示原始地址。
问题在于设定的位置。如果在apache配置文件中,您可以只更改配置。如果它被设置在其他地方,你需要找到它。
The TargetHttpsProxies resource没有列出改变它的任何方法。那么你如何发布导致上述行为的配置文件呢?