Ubuntu LNMP流量控制实战
一、控制维度与适用场景
二、Nginx层限流配置示例
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;
}
}
}
三、生效与验证
sudo nginx -t
sudo systemctl reload nginx
四、边界与系统层补充
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
# /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” 与连接排队问题。五、进阶与排错建议