当X-Forwarded-Proto为http时,取消设置HTTPS环境变量

4
我在Google Cloud Platform HTTP负载均衡器上设置了终端点终止,并将HTTPS设置为与后端通信的协议。这意味着所有请求,HTTP或HTTPS,都是通过HTTPS发送到apache。问题在于,即使将X-Forwarded-Proto设置为http,HTTPS环境变量仍设置为on。
我所做的所有研究和测试都只指向相反的情况(通过SetEnvIf X-Forwarded-Proto https HTTPS = on规则将HTTPS设置为on,当X-Forwarded-Proto为https时)。但是,我需要一些方法来取消当X-Forwarded-Proto为http时的HTTPS设置。
我尝试过设置SSLOptions -StdEnvVars以及许多组合的SetEnvIf,SetEnv和UnsetEnv。通过mod_rewrite进行设置对我来说不是一个选项(我不知道它是否会起作用)。关闭StdEnvVars的有趣说明是,即使它关闭了,除了HTTPS之外的所有SSL相关变量都消失了,我可以确认在我的任何配置文件中都没有其他设置它。
编辑:以下是我在服务器配置,虚拟主机和htaccess中尝试过的一些指令示例:
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

将这些指令与其他变量一起使用,包括像foo这样的测试,完全没有问题。


你能展示一些你尝试过的 SetEnvIfSetEnvUnsetEnv 的组合吗?这样我们的回答就不会重复你已经尝试过的实验了。 - Castaglia
@Castaglia 当然,我更新了我的问题。 - nathanjosiah
1个回答

0
使用这些指令与其他变量一起,包括像 foo 这样的测试也可以正常工作。
首先只是一个想法(如果有更好的想法,我很乐意撤回)

目标代理

目标代理 终止来自客户端的 HTTP(S) 连接,并被一个或多个全局转发规则引用,将传入请求路由到 URL 映射。

代理设置 HTTP 请求/响应头如下:

  • Via:1.1 google(请求和响应)
  • X-Forwarded-Proto:[http | https](仅请求)
  • X-Forwarded-For:<client IP(s)>, <global forwarding rule external IP>(仅请求) 可以是逗号分隔的 IP 地址列表,具体取决于客户端所经过的中介添加到 X-Forwarded-For 条目中的 IP 地址。第一部分显示了源地址。

问题是在哪里设置。如果在 apache 配置文件中,您可以更改配置。如果设置在其他地方,您需要找出在哪里设置。

TargetHttpsProxies资源也没有列出任何修改它的方法。那么你能否发布导致上述行为的配置文件呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接