【Nginx】配置nginx拦截非浏览器请求
如题,我用nginx代理的artalk,感觉最近有很多不像是真人发出来的评论到我的博客里面,
看了一下1panel里面ngnix的日志,在之前的错误日志里面看到了很多python requests发出来的请求,明显不是真人发的(他甚至不愿意模拟一下浏览器的referer)
在nginx反向代理配置的location体内的最开头加上如下内容,直接拦截掉这些非浏览器的UA
nginx
1 | # 如果 User-Agent 中包含这些字段,直接拒绝(非浏览器请求) |
简单测试一下是否能够拦截,首先是直接浏览器访问博客站点,artalk评论正常,那就没问题。
然后用curl模拟一下请求,nginx设置了之后会直接403拒绝,配置成功。
sh
1 | $ curl "https://artk.musnow.top" |
接下来要解决另外一个问题,我们拦截的时候不能把uptimerobot的uptime检测器也给拦截掉(因为uptimerobot返回403也是认为服务down了的,必须返回200)
官网上可以找到uptimerobot使用的是User-Agent:文档链接
The user agent we use is: Mozilla/5.0+(compatible; UptimeRobot/2.0; http://www.uptimerobot.com/)|
所以只需要修改nginx配置为如下就可以了,先过滤掉uptimerobot再判断其他ua。
nginx
1 | ###### 非浏览器请求拦截 ###### |
不过,上述漏洞只是治标不治本,脚本里面写个ua就可以绕过这一层。我主要是想拦截那些演都不演的脚本。
另外,根据AI提供的建议,上述的逻辑性能会比较差,更推荐使用map来处理。但是我的个人站点日活特别低,也不在乎这个,主要是在location里面写这一层拦截是比较方便的,如果设置成map需要在nginx的根配置文件http块里面写,太麻烦了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 慕雪的寒舍!
评论
Artalk Error
Retry
Retry