Answers:
很晚但仍然,我只是处理了同样的问题,这对我有用:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
该文件说:
当RequestHeader指令与add,append或set参数一起使用时,可以使用第四个参数来指定执行操作的条件。如果env = ...参数中指定的环境变量存在(或者如果环境变量不存在且指定了env =!...),则RequestHeader指令指定的操作将生效。否则,该指令将对请求无效。
HTTPS环境变量仅在通过SSL发出请求时设置。
你不想要那个 它将您的标头设置为“ HTTP / 1.1”(即使在https请求中也是如此)-可能对传递给您的任何内容都不有用。
您对http和https有不同的VirtualHost块;只需对RequestHeader
每个设置进行硬编码。
<VirtualHost *:80>
RequestHeader set X-Forwarded-Proto "http"
...
</VirtualHost>
<VirtualHost *:443>
RequestHeader set X-Forwarded-Proto "https"
...
</VirtualHost>
您可以使用early
关键字解决此问题:
RequestHeader set X-Forwarded-Proto "https" early
否则,您可以按照John Crenshaw的建议进行操作,即使用指令RewriteRule
代替ProxyPass
指令。
找到了原因。原来这是一个操作顺序问题。mod_rewrite负责提供这些环境变量,但是Apache在处理任何ProxyPass请求之后才会对其进行处理。在此之前,它只会设置为null。唯一的解决方法似乎是通过mod_rewrite进行代理。
看到http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160