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

时间:2016-07-08 21:58:13

标签: apache ssl google-compute-engine google-cloud-platform mod-ssl

我在我的Google Cloud Platform HTTP负载均衡器上设置了端点终端设置,并将HTTPS设置为与后端通信的协议。

这意味着所有请求(HTTP或HTTPS)都是HTTPS到apache。这样做的问题是即使HTTPS设置为onX-Forwarded-Proto环境变量也会设置为http

我的所有研究和测试仅指向相反的情况(当HTTPS on通过X-Forwarded-Proto规则https时设置SetEnvIf X-Forwarded-Proto https HTTPS=onHTTPS

但是,X-Forwarded-Protohttp时,我需要取消设置SSLOptions -StdEnvVars

我已尝试设置SetEnvIf以及SetEnvUnsetEnvStdEnvVars的多种组合。通过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}}这样的测试就可以了。

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没有列出改变它的任何方法。那么你如何发布导致上述行为的配置文件呢?