Joh*_*haw 14 load-balancing http-headers apache-2.2
我已将 Apache 设置为负载平衡器。我想让 apache 设置 X-Forwarded-Proto 标头,但这不起作用:
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
Run Code Online (Sandbox Code Playgroud)
标头设置为空。知道为什么吗?
小智 16
迟到了,但我刚刚处理了同样的问题,这对我有用:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
Run Code Online (Sandbox Code Playgroud)
该文件说:
当 RequestHeader 指令与 add、append 或 set 参数一起使用时,可以使用第四个参数来指定执行操作的条件。如果 env=... 参数中指定的环境变量存在(或者如果环境变量不存在并且指定了 env=!... ),则 RequestHeader 指令指定的操作将生效。否则,该指令将对请求无效。
而 HTTPS 环境变量仅在通过 SSL 发出请求时设置。
Sha*_*den 10
你不想那样;它会将您的标头设置为“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>
Run Code Online (Sandbox Code Playgroud)
您可以使用early关键字修复此问题:
RequestHeader set X-Forwarded-Proto "https" early
Run Code Online (Sandbox Code Playgroud)
否则,您可以按照 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
| 归档时间: |
|
| 查看次数: |
26527 次 |
| 最近记录: |