首页主机资讯Debian系统Nginx资源限制设置

Debian系统Nginx资源限制设置

时间2025-11-14 15:47:05发布访客分类主机资讯浏览449
导读:Debian 下 Nginx 资源限制实用指南 一 全局与连接层限制 工作进程与连接数:在 /etc/nginx/nginx.conf 的 http 块设置进程数与单进程最大连接数,影响可承载并发连接的上限(并发上限≈worker_pro...

Debian 下 Nginx 资源限制实用指南

一 全局与连接层限制

  • 工作进程与连接数:在 /etc/nginx/nginx.confhttp 块设置进程数与单进程最大连接数,影响可承载并发连接的上限(并发上限≈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 应用,可配合 burstnodelay 平滑突发流量。
  • 并发连接限制:使用 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

四 白名单与按条件限制

  • 使用 geomap 组合实现 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,如:
    * soft nofile 65535
    * hard nofile 65535
    
    注意:通过 systemd 启动的服务默认不读取 limits.conf,需在单元文件设置。
  • Systemd 服务级限制(推荐):编辑 /lib/systemd/system/nginx.service/etc/systemd/system/nginx.service,在 [Service] 段添加:
    [Service]
    LimitNOFILE=65536
    LimitNPROC=4096
    LimitCORE=infinity
    
    使配置生效:sudo 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
Debian上Nginx的缓存策略 Debian系统Nginx错误排查技巧

游客 回复需填写必要信息