本文详解Nginx限制单个IP并发连接数的4种实战方案,包含http/stream模块配置、突发流量处理技巧、压力测试方法及常见问题排查,并附赠电商平台防爬虫、直播服务器抗DDoS攻击等真实案例。
网站频繁崩溃怎么办?
当服务器日志出现大量ESTABLISHED状态连接时,可能是遭遇CC攻击或恶意爬虫。某跨境电商平台曾因未做并发限制,被羊毛党用2000+并发连接刷崩服务器。
- 问题定位:执行
netstat -n | awk '/^tcp/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
查看IP连接数 - 解决方案:在nginx.conf中添加
limit_conn_zone $binary_remote_addr zone=perip:10m;
- 配置示例:限制每个IP保持50个连接,突发允许100个
limit_conn perip 50;
limit_conn_log_level warn;
limit_conn_status 503;
直播平台如何应对流量洪峰?
某在线教育平台在促销期间采用漏桶算法实现平滑限流,通过stream模块实现四层代理控制:
- 新建
/etc/nginx/stream.conf.d/limit_conn.conf
- 配置TCP连接限制:
limit_conn_zone $remote_addr zone=stream_perip:10m;
server {
listen 1935;
limit_conn stream_perip 30;
} - 使用
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=1200
调整超时时间
配置不生效怎么排查?
某论坛用户设置limit_conn后仍出现连接数超标,最终发现是Nginx版本差异导致:
版本 | 注意事项 |
---|---|
≥1.9.3 | 支持stream模块限流 |
≥1.11.5 | 支持PROXY协议 |
≤1.7.6 | 需安装第三方模块 |
推荐使用nginx -V
确认编译参数,并通过ab -c 100 -n 1000 http://test.com/
进行压力测试。
常见问题解答
Q:限制连接数会影响正常用户吗?
A:合理设置阈值可兼顾安全与体验,建议参考net.core.somaxconn
系统参数
Q:如何动态调整限制规则?
A:使用nginx -s reload
热加载配置,或配合Lua脚本实现动态限流
Q:CDN环境下如何获取真实IP?
A:在http模块添加:
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;