为什么当我使用“return 444”时,nginx 总是关闭连接,即使有匹配的位置块?

为什么当我使用“return 444”时,nginx 总是关闭连接,即使有匹配的位置块?

据我了解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块,而不是零个或更多。

相关内容