Debian系统Nginx资源限制设置
导读:Debian 下 Nginx 资源限制实用指南 一 全局与连接层限制 工作进程与连接数:在 /etc/nginx/nginx.conf 的 http 块设置进程数与单进程最大连接数,影响可承载并发连接的上限(并发上限≈worker_pro...
Debian 下 Nginx 资源限制实用指南
一 全局与连接层限制
- 工作进程与连接数:在 /etc/nginx/nginx.conf 的 http 块设置进程数与单进程最大连接数,影响可承载并发连接的上限(并发上限≈worker_processes × worker_connections)。
- 文件描述符:提升 worker_rlimit_nofile 可避免 “too many open files”,需与系统级限制匹配。
- 典型配置示例:
调整后执行: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使配置生效。
二 请求速率与并发连接限制
- 速率限制:使用 limit_req_zone 定义共享内存区与速率,在 server/location 中用 limit_req 应用,可配合 burst 与 nodelay 平滑突发流量。
- 并发连接限制:使用 limit_conn_zone 定义并发键与共享内存区,在 location 中用 limit_conn 限制同一键的并发数。
- 示例(限制每个 IP 每秒 1 个请求,突发 5;每个 IP 并发连接不超过 10):
调整后执行: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。
三 带宽与请求体大小限制
- 带宽限速:在 http/server/location 使用 limit_rate 限制单个连接的传输速率,可按路径精细化控制(如下载限速)。
- 请求体大小:用 client_max_body_size 限制客户端请求体(如上传),防止过大请求耗尽资源。
- 示例(下载限速 100KB/s;上传上限 10MB):
调整后执行: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。
四 白名单与按条件限制
- 使用 geo 与 map 组合实现 IP 白名单:白名单 IP 的限流键设为空,从而跳过限制;其他 IP 按 $binary_remote_addr 限流。
- 示例(内网段与单 IP 白名单):
调整后执行: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 有效,重启失效)。 - 永久调整(登录会话生效):编辑 /etc/security/limits.conf 或 /etc/security/limits.d/*.conf,如:
注意:通过 systemd 启动的服务默认不读取 limits.conf,需在单元文件设置。* soft nofile 65535 * hard nofile 65535 - Systemd 服务级限制(推荐):编辑 /lib/systemd/system/nginx.service 或 /etc/systemd/system/nginx.service,在 [Service] 段添加:
使配置生效:[Service] LimitNOFILE=65536 LimitNPROC=4096 LimitCORE=infinitysudo systemctl daemon-reload & & sudo systemctl restart nginx。 - 全局默认(可选):在 /etc/systemd/system.conf 或 /etc/systemd/user.conf 设置如 DefaultLimitNOFILE=655360,影响所有服务(需重启或重新登录)。
- 提示:提升 nofile 等限制会占用更多系统资源,请根据硬件与业务规模谨慎调整。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian系统Nginx资源限制设置
本文地址: https://pptw.com/jishu/748108.html
