我正在链接我的设置
nginx > apache/php
Run Code Online (Sandbox Code Playgroud)
到
haproxy > nginx > apache/php
Run Code Online (Sandbox Code Playgroud)
(使用 haproxy 1.5-dev18 并编译了 ssl 支持)
nginx 和 haproxy 都已正确设置以设置 HTTP_X_FORWARDED_PROTO 标头。但是,当 nginx 从 haproxy 获取 ssl 流量时,它会将连接视为 http 并将标头设置为如此。
如何设置 nginx 以转发 HTTP_X_FORWARDED_PROTO 标头(如果存在),否则继续根据连接设置它?
Ech*_*ica 42
我想出了如何解决这个问题。问题是 nginx 覆盖了 haproxy 在我配置的这一行上设置的标头:
proxy_set_header X-Forwarded-Proto $scheme;
Run Code Online (Sandbox Code Playgroud)
我通过添加以下内容来修复它:
map $http_x_forwarded_proto $thescheme {
default $scheme;
https https;
}
Run Code Online (Sandbox Code Playgroud)
并更改 proxy_set_header 行以使用新方案:
proxy_set_header X-Forwarded-Proto $thescheme;
Run Code Online (Sandbox Code Playgroud)
job*_*wat 15
我对 AWS ELB 也有同样的需求
这是我的解决方案:
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
Run Code Online (Sandbox Code Playgroud)