Nginx SSL 重定向(无 if)

Nginx SSL 重定向(无 if)

在这个问题中:使用负载均衡器后面的 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,其余所有内容与给定的完全相同。

相关内容