在这个问题中:使用负载均衡器后面的 ngnix 将 http 重写为 https
问题是如何强制负载均衡器后面的 nginx 服务器使用 SSL。此设置的问题是负载均衡器处理 SSL,并且与 Web 服务器/节点之间有非 SSL 连接。
因此它查看 http-x-forwarded-proto 标头。接受的答案工作正常,只是它使用了 if ,如下所示:
if ($http_x_forwarded_proto = "http") {
rewrite ^/(.*)$ https://mydomain.com/$1 permanent;
}
这是邪恶的:http://wiki.nginx.org/IfIsEvil
有没有更好的方法来做到这一点,而不需要 if ?
一种可能的解决方案是在负载均衡器上强制使用 SSL,但这个负载均衡器由我们的托管商管理,这使得更改更加繁琐,我希望找到一个不需要更改负载均衡器的答案
答案1
由于您在 SSL 终止负载平衡器后面安装了 nginx,因此我认为您很难避免使用if
。但并非一切都失去了。
为了“不作恶”,您可以rewrite permanent
用替换return
,这是您可以用 做的安全的事情之一if
。
return 301 https://$http_host$request_uri;
这将简单地重建带有的 URL https
,其余所有内容与给定的完全相同。