请求协助:如何通过请求头阻止Nginx全站访问并拦截特定UA的批量IP连接
请求协助:如何通过请求头阻止Nginx全站访问并拦截特定UA的批量IP连接
嗨,看起来你在尝试拦截带有CensysInspect用户代理的批量IP请求时,碰到了Nginx配置的报错问题,我来帮你梳理下问题根源和正确的解决办法~
首先先明确你的场景:你发现多个不同IP的请求都使用了相同的CensysInspect UA,想要拦截这些请求,日志示例如下:
199.45.154.146 - - [23/Jun/2024:20:52:13 +0500] "GET / HTTP/1.1" 200 4505 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" 206.168.34.54 - - [22/Jun/2024:01:31:41 +0500] "GET / HTTP/1.1" 403 117 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
咱们先来分析你之前尝试的两种配置为什么会报错:
第一种配置的问题
你第一次写的配置:
map $http_user_agent $blocked_user_agents { default 0; "~*CensysInspect" 1; } deny if $blocked_user_agents;
触发的错误是:nginx: [emerg] invalid number of arguments in "deny" directive in /etc/nginx/nginx.conf:27
问题出在deny指令的用法上——deny是用来指定要拒绝的IP/IP段的,比如deny 192.168.1.1;,它不能直接跟if条件搭配使用,你把指令的用途混淆啦。
第二种配置的问题
你第二次尝试的配置:
if ($http_user_agent ~* "censys") { return 403; }
触发的错误是:nginx: [emerg] "if" directive is not allowed here in /etc/nginx/nginx.conf:22
这个错误是因为你把if指令放在了不允许的上下文里。Nginx的if指令只能用在server块或者location块内部,如果你把它放在了http块根目录或者events块里,就会触发这个报错。
正确的配置方案
这里给你两种可行的配置方式,按需选择:
方案一:用map + return(推荐,高效且适合复杂规则)
map指令需要定义在http块里,然后在server或者location块里使用变量判断,配置示例:
http { # 你的其他http级配置(比如include mime.types;之类的) # 定义map,匹配UA里的CensysInspect,大小写不敏感 map $http_user_agent $block_censys { default 0; ~*CensysInspect 1; } server { listen 80; server_name your-domain.com; # 在server块内添加判断,拦截匹配的请求 if ($block_censys = 1) { return 403; } # 你的其他server配置(比如root、location等) location / { root /var/www/html; index index.html; } } }
方案二:直接在server/location内用if判断(简单场景快速实现)
如果只是简单拦截这个UA,直接把if指令放在server块里就行,示例:
server { listen 80; server_name your-domain.com; # 直接在server块内判断UA,匹配就返回403 if ($http_user_agent ~* "censysinspect") { return 403; } # 你的其他server配置 location / { root /var/www/html; index index.html; } }
额外小贴士
- 每次修改配置后,先执行
nginx -t检查语法是否正确,没问题再重启Nginx,避免服务中断。 - 如果之后需要同时拦截特定IP和UA,可以把
deny指令(用来拦IP)和UA判断结合起来使用。 - Nginx官方文档提到
if指令有一些“坑”,复杂场景下优先用map或者rewrite规则来替代,避免出现意外行为。
备注:内容来源于stack exchange,提问作者dr.ipkins
相关产品推荐
相关产品推荐

