您如何编写Nginx规则以将所有非https请求重定向到https(特定路径除外)?
我有一个不在SSL之下的健康检查路径,但是我希望其他所有内容都重定向到SSL,所以我需要一个规则,例如:
if ($http_x_forwarded_proto != 'https' && $request_uri != "/check.html") {
return 301 https://$host$request_uri;
}
但是这给了我一个语法错误。 Google展示了几个用于执行逻辑OR表达式的示例,但没有显示AND的示例。 Nginx支持吗?
编辑:此服务器位于负载均衡器后面,所有请求都在端口80上转发,即使原始请求是https。我还需要此重定向才能使用配置如下的uwsgi应用程序:
location / {
uwsgi_pass unix:///tmp/myapp.sock;
include /usr/local/myapp/uwsgi_params;
}
答案 0 :(得分:1)
undefined
部分可以转换为一对$request_uri != "/check.html"
块。并在其中一个中放置一个简单的location
块。
例如:
if
有关location / {
if ($http_x_forwarded_proto != 'https') {
return 301 https://$host$request_uri;
}
...
}
location = /check.html {
...
}
的使用,请参见this caution。