Answers:
我想出了解决方法。问题是nginx正在覆盖haproxy在我的配置这一行设置的标头:
proxy_set_header X-Forwarded-Proto $scheme;
我通过添加以下内容来修复它:
map $http_x_forwarded_proto $thescheme {
default $scheme;
https https;
}
并更改proxy_set_header行以使用新方案:
proxy_set_header X-Forwarded-Proto $thescheme;
$scheme
VS $thescheme
。
default $scheme
则将发生这种情况,将其设置$thescheme
为HTTPS,尽管实际上(向haproxy的)请求是不安全的HTTP。—为避免这种情况,该怎么办:default $http_x_forwarded_proto; '' $scheme;
,因此,如果haproxy表示HTTP,它将受到尊重。
default $http_x_forwarded_proto;
)。
我对AWS ELB也有同样的需求
这是我的解决方法:
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
$http_x_forwarded_proto
某个地方下注吗?那是什么?
proxy_set_header X-Forwarded-Proto $scheme;
,这是不行的
我不能只是发表评论,所以我将其发布为答案:您能否将部分或全部nginx配置提供给我们,以便我们了解其出了什么问题?也可能是您的HAProxy配置吗?
我能想到的第一个问题是您的HAProxy正在执行ssl终止。总结起来,为了减轻后端服务器的负担,可以将负载均衡器配置为执行所有ssl任务,然后通过HTTP与您的后端服务器进行通信。像这里的方案:http : //blog.exceliance.fr/2012/09/10/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/
为了给您一个很好的答案,您可以检查一下http <> https配置中是否没有任何环回问题吗?也许然后您可以将http重定向到http,将https重定向到https,然后强制将http重定向到https。
您也可以检查一下是否在HAProxy配置中启用了ssl直通吗?
proxy_set_header
行是相同的。