Ubuntu LNMP如何实现流量控制
导读:Ubuntu LNMP流量控制实战 一、控制维度与适用场景 速率限制:限制单个客户端单位时间的请求数,平滑突发流量,保护后端(如 PHP-FPM)。 并发连接限制:限制单个客户端或虚拟主机的并发连接数,防止连接洪泛。 带宽限速:限制响应体...
Ubuntu LNMP流量控制实战
一、控制维度与适用场景
- 速率限制:限制单个客户端单位时间的请求数,平滑突发流量,保护后端(如 PHP-FPM)。
- 并发连接限制:限制单个客户端或虚拟主机的并发连接数,防止连接洪泛。
- 带宽限速:限制响应体发送速率,常用于下载目录或接口返回大文件场景。
- 边界与系统层控制:用 UFW 做端口/IP 白名单,用系统/内核参数提升可承载连接数。
二、Nginx层限流配置示例
- 在 http 段定义共享内存区与规则(作用于全局或继承到 server/location):
http {
# 每个 server_name 的并发连接数(示例上限 100)
limit_conn_zone $server_name zone=perserver:10m;
# 每个客户端 IP 的并发连接数(示例上限 10)
limit_conn_zone $binary_remote_addr zone=peraddr:10m;
# 每个客户端 IP 的请求速率(示例 5 请求/秒,突发 10,不延迟处理突发)
limit_req_zone $binary_remote_addr zone=perreq:10m rate=5r/s;
server {
listen 80;
server_name example.com;
# 对整站应用速率与并发限制
limit_req zone=perreq burst=10 nodelay;
limit_conn peraddr 10;
limit_conn perserver 100;
# 对下载目录按 IP 限速(示例 200 KB/s)
location /download/ {
alias /var/www/download/;
limit_conn peraddr 5;
# 下载并发更严
limit_rate 200k;
# 带宽限速
limit_rate_after 1m;
# 先放行 1MB 再限速(可选)
}
# 对 PHP 动态请求单独限流(示例 3 请求/秒,突发 5)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass 127.0.0.1:9000;
# 或 unix:/run/php/phpX.Y-fpm.sock
limit_req zone=perreq burst=5 nodelay;
}
}
}
- 说明
- 速率限制使用 limit_req_zone + limit_req;并发连接使用 limit_conn_zone + limit_conn;带宽限速使用 limit_rate/limit_rate_after。
- 突发队列与 nodelay 的组合可平滑突发而不丢弃合法请求(超出速率的请求会占用队列或直接拒绝,取决于配置)。
三、生效与验证
- 语法检查与热加载
sudo nginx -t
sudo systemctl reload nginx
- 验证方法
- 速率/并发:使用 ab、wrk、jmeter 或 curl 并发压测,观察返回码(如 429 表示触发速率限制)、响应时延与是否被限速。
- 带宽限速:在下载目录放置大文件,用浏览器或命令行工具(如 curl)下载,观察实际速率是否接近 limit_rate 设定值。
四、边界与系统层补充
- 防火墙与访问控制(UFW)
- 仅放行业务与运维所需端口,并对敏感端口(如 22/SSH)做来源 IP 白名单:
sudo apt update &
&
sudo apt install -y ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from <
你的IP>
to any port 22
sudo ufw enable
sudo ufw status
- 系统/内核与连接承载能力
- 提升文件描述符与内核网络参数,配合 Nginx 的并发能力(示例思路):
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# /etc/sysctl.conf(按需调整)
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
- 修改后执行
sudo sysctl -p生效。该步骤可缓解高并发下的 “Too many open files” 与连接排队问题。
五、进阶与排错建议
- 粒度与策略
- 将更严格的规则放在更具体的 location(如下载目录、管理后台),对静态资源可适当放宽或交由 CDN。
- 对 API 与静态资源使用不同的 limit_req_zone/limit_conn_zone,避免“一刀切”。
- 观测与调优
- 结合 Nginx 访问日志/错误日志 与压测结果逐步微调 rate、burst、limit_conn、limit_rate 参数。
- 若使用 CDN,请在 CDN 侧配置速率/并发与 WAF 策略,源站仅作为回源控制兜底。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP如何实现流量控制
本文地址: https://pptw.com/jishu/755042.html
