Debian 下 Nginx 资源限制实用指南
一 全局与连接层限制
user www-data;
worker_processes auto; # 一般设为 CPU 核心数
worker_rlimit_nofile 65536; # 提升 worker 可打开文件数
events {
use epoll; # Linux 推荐事件模型
worker_connections 16384; # 单 worker 并发连接上限
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
}
调整后执行:sudo nginx -t && sudo systemctl reload nginx 使配置生效。二 请求速率与并发连接限制
http {
# 速率限制:按客户端 IP,1r/s,共享内存 10MB
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
# 并发连接限制:按客户端 IP,共享内存 10MB
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
listen 80;
server_name example.com;
location / {
# 应用速率限制:突发 5,nodelay 立即处理不排队
limit_req zone=req_limit burst=5 nodelay;
# 应用并发连接限制:每个 IP 最多 10 个并发连接
limit_conn conn_limit 10;
proxy_pass http://backend;
}
}
}
调整后执行:sudo nginx -t && sudo systemctl reload nginx。三 带宽与请求体大小限制
server {
listen 80;
server_name example.com;
# 下载限速:每个连接 100KB/s
location /download/ {
alias /var/www/downloads/;
limit_rate 100k;
}
# 上传限制:最大 10MB
client_max_body_size 10m;
location / {
proxy_pass http://backend;
}
}
调整后执行:sudo nginx -t && sudo systemctl reload nginx。四 白名单与按条件限制
http {
# 定义白名单:1 表示受限,0 表示放行
geo $limit {
default 1;
192.168.1.0/24 0;
10.0.0.1 0;
}
# 将 $limit 映射为限流键:白名单为空(不限流),其他为客户端 IP
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_limit:10m rate=1r/s;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=req_limit burst=5 nodelay;
proxy_pass http://backend;
}
}
}
调整后执行:sudo nginx -t && sudo systemctl reload nginx。五 系统级与 Systemd 资源限制
ulimit -n 65535(仅对当前 shell 有效,重启失效)。* soft nofile 65535
* hard nofile 65535
注意:通过 systemd 启动的服务默认不读取 limits.conf,需在单元文件设置。[Service]
LimitNOFILE=65536
LimitNPROC=4096
LimitCORE=infinity
使配置生效:sudo systemctl daemon-reload && sudo systemctl restart nginx。