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 可通过 mapif 或正则表达式匹配规则实现流量过滤、访问控制或日志统计。以下是常用场景及规则示例:


? 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;

⚠️ 注意事项

  1. 正则表达式优化
    • 使用 ~* 表示不区分大小写,避免遗漏变体(如 "chrome" vs "Chrome")。
    • 避免过度复杂的正则,以免影响性能。
  2. 规则优先级
    • serverlocation 块中按需嵌套 if 条件,注意逻辑顺序。
  3. 安全加固
    • 结合 geo 模块或 IP 黑名单,增强对恶意请求的防御。
    • 避免仅依赖 User-Agent 验证,因其可被伪造。

? 配置验证与测试

  1. 语法检查
    nginx -t
    
  2. 实时查看日志
    tail -f /var/log/nginx/access.log
    
  3. 模拟请求测试
    curl -A "TestBot/1.0" http://your-domain.com
    

 

通过合理配置 User-Agent 匹配规则,Nginx 可有效管理流量、提升安全性并优化用户体验。建议根据实际业务需求动态调整规则,并定期更新爬虫黑名单库以应对新型攻击。


标签:
  • nginx