HTTP 444(无响应)代替404、403错误页面?

18

我经常在nginx配置中使用"return 444"来阻止直接通过IP或错误的主机名访问我的服务器的爬虫。它只是关闭连接,完美。

现在我想使用这个响应替代nginx默认的404.html页面,但我在配置时失败了。

error_page 500 502 503 504 /custom_50x.html;

这个方法运行良好,但我无法像这样“return 444”:

server {
    listen      80;
    server_name "";
    return      444;
}

有人知道如何将这两个组合起来吗?


1
鉴于Slowloris和类似的滴水连接攻击存在问题,这是一个有趣的方法。 - Kzqai
2个回答

19

重定向请求后,您可以轻松返回状态码:

server {
  error_page 500 502 503 504 @blackhole;

  location @blackhole {
    return 444;
  }
}

2
我发现在error_page指令中的=444是不必要的。 - diachedelic
谢谢@diachedelic,不幸的是这个编辑太小了,无法完成。(最少6个字符) - Howard
1
@Howard 缩进可以同时修复。 - diachedelic

7

我想补充一点,当服务器接收到某些奇怪的请求时(更多细节在这里),使用@blackhole命名位置会引发Nginx默认的500错误页面,因此未实现所需结果(444)。

我解决了这个问题,改用以下记法:

error_page 301 400 403 404 500 502 503 504 =444 /444.html;
location = /444.html {
        return 444;
}

更新:请注意,如果上面的代码块本身位于一个location块内,那么在重新加载时,位置路径location = /444.html {…可能会引发Nginx错误,因为Nginx要求它是父location块的子位置 --> 比如:location = [sub-location]/444.html {…


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接