负载均衡器后面的nginx $ scheme变量

时间:2014-01-20 09:58:35

标签: nginx amazon-elb

如果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时,是否还需要更新一些标题?

1 个答案:

答案 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模块会很好!