如果nxinx在负载均衡器后面运行,是否可以将nginx $ scheme 值强制为“https”?
在我的场景中,负载均衡器负责与客户端的https通信,并将请求作为原始http转发给nginx。我知道我可以做这样的事情来检测https
set $my_scheme "http";
if ($http_x_forwarded_proto = "https") {
set $my_scheme "https";
}
但我很好奇是否有类似real_ip_header
的IP功能。
在检测https时,是否还需要更新一些标题?
答案 0 :(得分:26)
我们的设置与您的设置相同,仅使用map
代替if/set
(根据nginx devs的建议)。
# Sets a $real_scheme variable whose value is the scheme passed by the load
# balancer in X-Forwarded-Proto (if any), defaulting to $scheme.
# Similar to how the HttpRealIp module treats X-Forwarded-For.
map $http_x_forwarded_proto $real_scheme {
default $http_x_forwarded_proto;
'' $scheme;
}
P.S。我同意,real_scheme
模块会很好!