据我了解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 提供其内置的欢迎页面。为什么这不起作用?
答案1
return
出现在一个server
块中但不在任何块中,总是在查看location
任何块之前进行处理,在location
阶段NGX_HTTP_SERVER_REWRITE_PHASE。
您需要将其添加到与location
任何其他块不匹配的内容相匹配的块中location
。因此,您的所有server
块都应该具有一或更多location
块,而不是零个或更多。