温馨提示×

温馨提示×

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

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

nginx如何请求连接限制笔记

发布时间:2021-06-29 09:49:57 来源:亿速云 阅读:209 作者:chen 栏目:大数据
# 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字,包含配置示例、原理说明和实战建议)

向AI问一下细节

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

AI