我将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指令。