Nginx SSLredirect没有if

在这个问题中: 在负载平衡器后面用ngnix重写http到https

问题是如何在负载均衡器之后强制使用nginx服务器的SSL。 这个设置的问题是负载平衡器处理SSL并且与web服务器/节点具有非SSL连接。

所以它看着http-x-forward-proto头。 接受的答案工作正常,除了它使用如果像这样:

if ($http_x_forwarded_proto = "http") { rewrite ^/(.*)$ https://mydomain.com/$1 permanent; } 

这是邪恶的: http : //wiki.nginx.org/IfIsEvil

有没有更好的方法来做到这一点,如果没有?

一个可能的解决scheme是强制ssl在负载均衡器上,但是这个负载均衡器是由我们的主机pipe理的,这使得更改变得更乏味,希望得到一个不需要改变负载均衡器的答案

既然你有一个SSL端接负载均衡器后面的nginx,我不认为你会很容易避免使用if 。 但是并不是所有人都失去了

要成为“不是邪恶的”,你可以使用return来replacerewrite permanent的东西,这是你可以用if来做的安全事情之一。

  return 301 https://$http_host$request_uri; 

这将简单地使用https重buildurl,而其他所有内容完全按照给定的。