首页主机资讯Ubuntu LNMP如何实现流量控制

Ubuntu LNMP如何实现流量控制

时间2025-11-25 00:11:04发布访客分类主机资讯浏览451
导读: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
  • 验证方法
    • 速率/并发:使用 abwrkjmetercurl 并发压测,观察返回码(如 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
php-fpm内存溢出如何解决 Ubuntu SSH如何管理多个用户

游客 回复需填写必要信息