nginx如何请求连接限制笔记

发布时间:2021-06-29 09:49:57 作者:chen
来源:亿速云 阅读:179
# nginx如何请求连接限制笔记

## 1. 连接限制的核心概念

### 1.1 为什么需要连接限制
在高并发Web服务场景中,连接限制是保护服务器资源的关键手段:
- 防止单个IP耗尽连接池
- 缓解DDoS攻击的影响
- 保证服务资源合理分配
- 避免慢连接占用资源

### 1.2 基础模块
```nginx
http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_req_zone $binary_remote_addr zone=perip_req:10m rate=10r/s;
}

2. 连接数限制实战

2.1 配置连接数限制

http {
    # 定义共享内存区(1MB可存储约1.6万个IP)
    limit_conn_zone $binary_remote_addr zone=addr_zone:10m;
    
    server {
        location / {
            # 每个IP同时允许5个连接
            limit_conn addr_zone 5;
            
            # 连接超时设置
            limit_conn_status 429;
            limit_conn_log_level warn;
        }
    }
}

2.2 多维度限制方案

# 按服务器级别限制
limit_conn_zone $server_name zone=servers:10m;

# 按用户组限制
map $remote_addr $user_group {
    default "normal";
    192.168.1.0/24 "vip";
}

limit_conn_zone $user_group zone=group_zone:10m;

3. 请求速率限制详解

3.1 基础速率控制

http {
    # 定义速率限制区(10r/s = 600r/m)
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;
    
    server {
        location /api/ {
            # 突发请求处理设置
            limit_req zone=req_zone burst=20 nodelay;
            
            # 自定义返回状态码
            limit_req_status 429;
        }
    }
}

3.2 高级速率策略

# 多级速率限制
limit_req_zone $binary_remote_addr zone=strict:10m rate=2r/s;
limit_req_zone $binary_remote_addr zone=normal:10m rate=10r/s;

location /payment/ {
    limit_req zone=strict burst=5;
}

location /static/ {
    limit_req zone=normal burst=30;
}

4. 实战场景配置案例

4.1 下载服务器防护

# 限制下载带宽+连接数
location /download/ {
    limit_conn addr_zone 3;
    limit_rate_after 10m;
    limit_rate 100k;
    
    # 防止爬虫高频访问目录
    limit_req zone=req_zone burst=5;
}

4.2 API接口防护

map $http_appkey $api_limit {
    default "10r/s";
    "VIP_KEY" "100r/s";
}

limit_req_zone $binary_remote_addr zone=api_zone:10m rate=$api_limit;

location /v1/api {
    limit_req zone=api_zone burst=20;
    limit_req_status 429;
    
    # 连接持续时间限制
    proxy_read_timeout 30s;
}

5. 性能调优与监控

5.1 内存区域计算

计算公式:
存储IP数 = 内存大小(m) * 1024 * 1024 / (IP长度 + 64)

示例:
10MB存储区可保存约16万IPv4地址

5.2 状态监控配置

location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

# 错误日志分析建议
log_format limiter '$remote_addr - $status - $limit_req_status';

6. 常见问题解决方案

6.1 NAT环境处理

# 使用X-Forwarded-For最后一跳IP
map $http_x_forwarded_for $real_ip {
    default $remote_addr;
    ~^([^,]+) $1;
}

limit_conn_zone $real_ip zone=nat_zone:10m;

6.2 白名单设置

geo $limit {
    default 1;
    192.168.0.0/16 0;
    10.0.0.0/8 0;
}

map $limit $limit_key {
    0 "";
    1 $binary_remote_addr;
}

limit_req_zone $limit_key zone=dynamic:10m rate=5r/s;

7. 高级防护配置

7.1 动态限速

# 基于URI的差异化限速
map $uri $rate_limit {
    ~^/api/v1/search 5r/s;
    ~^/api/v2/data 20r/s;
    default 10r/s;
}

limit_req_zone $binary_remote_addr zone=dynamic_rate:10m rate=$rate_limit;

7.2 组合防护策略

location / {
    # 连接数限制
    limit_conn perip 10;
    limit_conn perserver 1000;
    
    # 请求速率限制
    limit_req zone=perip_req burst=30;
    
    # 带宽限制
    limit_rate_after 1m;
    limit_rate 500k;
    
    # 超时控制
    proxy_connect_timeout 3s;
}

8. 测试验证方法

8.1 压力测试命令

# 测试连接数限制
ab -n 1000 -c 50 http://example.com/

# 测试速率限制
siege -r 100 -c 50 http://example.com/api

8.2 日志分析技巧

# 查看被限制的请求
grep 'limiting requests' /var/log/nginx/error.log

# 统计触发限制的IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr

9. 生产环境建议

  1. 渐进式实施:从宽松限制开始逐步收紧
  2. 分级策略:区分静态资源与动态接口
  3. 监控报警:设置连接数阈值报警
  4. 定期评估:根据业务增长调整参数
  5. 组合防御:结合防火墙、WAF等方案

附录:常用参数速查表

指令 说明 示例值
limit_conn_zone 定义共享内存区 zone=name:10m
limit_conn 设置连接数限制 limit_conn zone 10
limit_req_zone 定义请求限制区 rate=10r/s
limit_req 启用请求限制 burst=20 nodelay
limit_rate 带宽限制 100k
limit_status 自定义返回码 429

注:所有配置需要根据实际业务需求调整,建议在测试环境充分验证后再上线生产环境。 “`

(全文约1950字,包含配置示例、原理说明和实战建议)

推荐阅读:
  1. 基于Nginx实现访问控制、连接限制
  2. 怎么在Nginx中限制http资源请求

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx

上一篇:C++中的堆和栈分别是什么

下一篇:Linux或macOS命令行终端设置http/https代理及密码登录设置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》