使用 Nginx 一定要用好 444 状态码

1,983 阅读3分钟

在使用 Nginx 上,明月也算是很多年了,自从放弃虚拟共享主机开始就在用 Nginx 了,早几年也是经常的针对 Nginx 各种折腾优化尝试,直到开始 CDN 必备后就研究的少了,但一直都保持着始终使用 Nginx 最新版的习惯。目前 Nginx 上折腾最多的也就是一些恶意请求的拦截屏蔽之类了,就发现 Nginx 其实在 HTTP 状态码上非常的灵活,就比如今天要说的这个 444 状态码。

什么是 444 状态码

一种非标准状态代码,用于指示 Nginx 关闭连接而不向客户端发送响应,最常用于拒绝恶意或格式错误的请求。客户端看不到此状态代码,它仅出现在 nginx 日志文件中。

从上面的官方介绍可以看出来,这个 444 状态码是 Nginx 特有的保留状态码,可以说是 Nginx 专用的,最大的亮点就是“指示 Nginx 关闭连接而不向客户端发送响应”,也因此会被很多人用来在 Nginx 阻挡 DDoS 攻击。

**管理员无敌
明月尤其喜欢把这个 444 状态码用在 Nginx 的拦截和屏蔽上,比如某些恶意针对某些 URL 的请求等等,效果可以说是出奇的好就因为这个 444 状态码指示 Nginx 关闭连接而不向客户端发送响应,并且客户端还看不到此状态代码,只能不断的发送请求然后被拒绝和关闭连接,空耗请求!

如上截图所示,无论恶意请求有多少代理 IP 都是被 Nginx 关闭连接不响应了,所以上图被拦截的恶意请求无论换成什么 IP 传输量都是 0,

反而正常的请求没有被拦截和屏蔽,可以有正常的请求传输流量

网上几乎所有的教授 Nginx 拦截屏蔽恶意请求的代码都是返回 403 或者 404 等等,估计因为都是抄袭而来的,所以没有几个会使用 444 状态码,只有实测过后长时间的积累才能感受到 444 状态码的关闭连接不响应,还不返回状态的好处。

明月一直都不建议针对 IP 的屏蔽和拦截,因为真心没有多大用处,免费的代理 IP 真的是太多了,一个恶意请求给你弄个几千上万个代理 IP 真的是太容易了,你屏蔽 IP 的话,除了还来更多的误伤就没有其他意义了,加上你返回的状态码也会随时告知对方人家的 IP 被你拦截了,不更是及时准确的通知人家要更换代理 IP 库了吗?所以不屏蔽 IP 和使用 444 状态码才是 Nginx 拦截屏蔽的最佳方法,如果有条件再有个“人机验证”的配合就基本完美了,什么恶意请求都可以很好的解决,还不消耗自己服务器的流量带宽和系统的负载。

有关 Nginx 使用 444 状态码的好处,只能自己细品理解了,至于效果好不好的,自行使用后体验吧,反正明月是非常推荐在 Nginx 里多使用这个 444 状态码的,简单好用还高效,应对恶意请求拦截绝对是绝配。