参考资料

  1. Nginx expires、etag、if_modified_since:客户端缓存控制详细说明以及案例
  2. Nginx的应用场景
  3. Nginxroot指令根目录配置详细说明以及案例
  4. Nginx伪动态SSI服务器详细说明以及案例
  5. NginxPHP服务器环境搭建详细说明以及案例
  6. Nginx如何支持动态内容?
  7. nginx 配置代理
  8. nginx 配置ssl证书
  1. 限制连接数原理

    • 使用limit_conn_module模块限制单个IP的并发连接数

    • 通过limit_req_module模块限制请求速率

  2. 配置步骤

    http {
        # 定义共享内存区域
        limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
        limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
    
        server {
            # 限制单个IP并发连接数为5
            limit_conn conn_limit_per_ip 5;
    
            # 限制请求速率(每秒10个请求,突发20个)
            limit_req zone=req_limit_per_ip burst=20 nodelay;
        }
    }
  3. 关键参数说明

    • limit_conn_zone: 定义连接限制的共享内存区域

    • zone=name:size: 区域名称和内存大小

    • $binary_remote_addr: 以二进制格式存储客户端IP

    • rate=10r/s: 每秒允许10个请求

    • burst: 允许的突发请求数

  4. 完整示例配置

    http {
        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;
    
        server {
            listen 80;
            server_name example.com;
    
            # 每个IP最多5个连接
            limit_conn perip 5;
            # 整个服务器最多100个连接
            limit_conn perserver 100;
    
            # 请求速率限制
            limit_req zone=perip burst=10 nodelay;
        }
    }
  5. 验证方法

    • 使用abwrk工具进行压力测试

    • 检查Nginx错误日志/var/log/nginx/error.log中的503错误

    • 使用nginx -t测试配置语法