带有Apache环境variables的RequestHeader

我将Apache设置为负载平衡器。 我想让Apache设置X-Forwarded-Proto头,但是这不起作用:

RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e" 

标题被设置为空。 任何想法为什么?

虽然晚了,但我仍然处理同样的问题,这对我有效:

 RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS 

该文件说:

当RequestHeader指令与add,append或set参数一起使用时,可以使用第四个参数来指定采取动作的条件。 如果在env = …参数中指定的环境variables存在(或者环境variables不存在,并且指定了env =!…),则由RequestHeader指令指定的操作将生效。 否则,该指令对请求不起作用。

HTTPS环境variables只有在通过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> 

find原因。 原来这是一个操作问题的顺序。 mod_rewrite负责提供这些环境variables,但Apache不处理它,直到它处理任何ProxyPass请求为止。 在此之前,它只会设置为空。 唯一的解决方法似乎是通过mod_rewrite进行代理。

请参阅http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160

你可以通过使用early关键字来解决这个问题:

 RequestHeader set X-Forwarded-Proto "https" early 

否则,你可以做John Crenshaw所build议的,它使用RewriteRule而不是ProxyPass指令。