根据我对nginx 如何处理请求的理解,以下 nginx 配置应该会导致所有与前缀 location 匹配的请求/
,从而提供HTTP/1.1 301 Moved Permanently
重定向到站点 https 版本的响应。
server {
listen 80 default_server;
location / {
return 301 https://$host$request_uri;
}
return 444;
}
然而,事实并非如此:
$ curl localhost
curl: (52) Empty reply from server
nginx 似乎更倾向于返回 444 (关闭连接)以上响应预期的重定向。
显然这个具体的例子很容易通过删除return 444
语句来解决,但是我的现实生活中的配置文件是用零个或多个位置块动态生成的,我更喜欢最后的“catch-all”return 444
来防止 nginx 为其内置提供服务欢迎页面。为什么这不起作用?
return
在NGX_HTTP_SERVER_REWRITE_PHASE阶段,出现在一个server
块中但不在任何块中location
总是在location
查看任何块之前处理。您需要将此添加到
location
与其他块不匹配的任何内容匹配的location
块中。所以你所有的server
块都应该有一个或多个location
块,而不是零个或多个。