nginx > apache/php
到
haproxy > nginx > apache/php
(使用已编译支持SSL的haproxy 1.5-dev18)
nginx和haproxy都已正确设置HTTP_X_FORWARDED_PROTO头部。然而,当nginx从haproxy接收到SSL流量时,它将连接视为http,并相应地设置头部。
如果存在HTTP_X_FORWARDED_PROTO头部,我该如何设置nginx来转发它,否则继续根据连接设置头部?
nginx > apache/php
到
haproxy > nginx > apache/php
(使用已编译支持SSL的haproxy 1.5-dev18)
nginx和haproxy都已正确设置HTTP_X_FORWARDED_PROTO头部。然而,当nginx从haproxy接收到SSL流量时,它将连接视为http,并相应地设置头部。
如果存在HTTP_X_FORWARDED_PROTO头部,我该如何设置nginx来转发它,否则继续根据连接设置头部?
proxy_set_header X-Forwarded-Proto $scheme;
我通过添加以下内容来修复它:
map $http_x_forwarded_proto $thescheme {
default $scheme;
https https;
}
将代理设置头行更改为使用新方案:
proxy_set_header X-Forwarded-Proto $thescheme;
我也有同样的需求,关于AWS ELB
以下是我的解决方案:
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
$http_x_forwarded_proto?那是什么意思? - Jonathanproxy_set_header X-Forwarded-Proto $scheme;,但实际上并不起作用。 - MikeMarsianproxy_set_header x-forwarded-proto https;,最终它起作用了。我的设置是与node.js作为上游一起使用的。 - myNewAccountX-Forwarded-Proto=http,https。 - Luciano
proxy_set_header前后的行是一样的。 - Wilfred Hughes$scheme与$thescheme的区别。 - Arlen Beilerdefault $scheme的情况将发生,将$thescheme设置为HTTPS,尽管实际上(对于haproxy)的请求是不安全的HTTP。- 为了避免这种情况,怎么样考虑一下:default $http_x_forwarded_proto; '' $scheme;,这样如果haproxy说是HTTP,就会被尊重。 - KajMagnus