nginx一些常用user_agent的匹配规则
云计算
nginx一些常用user_agent的匹配规则
2025-04-12 00:04
? Nginx User-Agent 匹配规则详解 User-Agent 是客户端浏览器或爬虫向服务器发送请求时携带的标识信息,Nginx 可通过 map、if 或正则表达式匹配规则实现流量过滤、访问控制或日志统计。以下是常用场景及规则示例:
? Nginx User-Agent 匹配规则详解
User-Agent 是客户端浏览器或爬虫向服务器发送请求时携带的标识信息,Nginx 可通过
map
、if
或正则表达式匹配规则实现流量过滤、访问控制或日志统计。以下是常用场景及规则示例:
? 1. 常见浏览器匹配规则
场景:识别主流浏览器类型(Chrome、Firefox、Safari 等)。
规则示例:# 匹配 Chrome 浏览器 if ($http_user_agent ~* "(Chrome/[0-9]+.[0-9]+)" ) { # 执行操作(如重定向或记录日志) } # 匹配 Firefox 浏览器 if ($http_user_agent ~* "Firefox/[0-9]+.[0-9]+" ) { # ... } # 匹配 Safari 浏览器 if ($http_user_agent ~* "^.*Safari/[0-9]+.*$" ) { # ... }
?️ 2. 爬虫与蜘蛛匹配规则
场景:识别搜索引擎蜘蛛(如 Googlebot、Baiduspider)或恶意爬虫。
规则示例:# 匹配 Googlebot if ($http_user_agent ~* "Googlebot" ) { # 允许访问或限制速率 } # 匹配百度蜘蛛 if ($http_user_agent ~* "Baiduspider" ) { # ... } # 匹配通用爬虫(含 "Spider" 或 "Bot" 关键词) if ($http_user_agent ~* "(Spider|Bot)" ) { # 拒绝访问(返回 403) return 403; }
?️ 3. 移动设备匹配规则
场景:区分移动端与 PC 端流量,或限制特定设备访问。
规则示例:# 匹配 iPhone 设备 if ($http_user_agent ~* "iPhone") { # 重定向到移动端页面 rewrite ^/(.*)$ /mobile/$1 permanent; } # 匹配 Android 设备 if ($http_user_agent ~* "Android") { # ... } # 匹配平板设备(如 iPad) if ($http_user_agent ~* "iPad") { # ... }
? 4. 阻止恶意请求规则
场景:拦截已知的恶意爬虫或攻击工具。
规则示例:# 阻止 "Python-Requests" 库发起的请求(常见于脚本攻击) if ($http_user_agent ~* "Python-Requests" ) { return 403; } # 阻止 "curl" 命令行工具(可结合其他条件判断) if ($http_user_agent ~* "^curl$" ) { return 403; } # 阻止空 User-Agent(常见于恶意请求) if ($http_user_agent = "") { return 444; # 直接关闭连接 }
? 5. 日志统计与分类
场景:按 User-Agent 类型记录不同日志,便于分析流量来源。
规则示例:# 使用 map 模块定义变量 map $http_user_agent $user_agent_type { default "unknown"; ~*Chrome "chrome"; ~*Firefox "firefox"; ~*Safari "safari"; ~*Bot "bot"; } # 在日志格式中添加分类字段 log_format custom_log '$remote_addr - $user_agent_type [$time_local] "$request"'; access_log /var/log/nginx/access.log custom_log;
⚠️ 注意事项
- 正则表达式优化:
- 使用
~*
表示不区分大小写,避免遗漏变体(如 "chrome" vs "Chrome")。- 避免过度复杂的正则,以免影响性能。
- 规则优先级:
- 在
server
或location
块中按需嵌套if
条件,注意逻辑顺序。- 安全加固:
- 结合
geo
模块或 IP 黑名单,增强对恶意请求的防御。- 避免仅依赖 User-Agent 验证,因其可被伪造。
? 配置验证与测试
- 语法检查:
nginx -t
- 实时查看日志:
tail -f /var/log/nginx/access.log
- 模拟请求测试:
curl -A "TestBot/1.0" http://your-domain.com
通过合理配置 User-Agent 匹配规则,Nginx 可有效管理流量、提升安全性并优化用户体验。建议根据实际业务需求动态调整规则,并定期更新爬虫黑名单库以应对新型攻击。
标签:
- nginx