插件窝 干货文章 nginx与apache怎么限制ip并发访问

nginx与apache怎么限制ip并发访问

并发 限制 IfModule 请求 320    来源:    2025-04-22

Nginx与Apache限制IP并发访问的方法

Nginx限制IP并发访问

1. 使用ngx_http_limit_req_module模块限制请求速率

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

    server {
        location / {
            limit_req zone=one burst=20 nodelay;
            # 其他配置...
        }
    }
}
  • zone=one:10m:创建名为one的共享内存区,大小10MB
  • rate=10r/s:限制每秒10个请求
  • burst=20:允许突发20个请求
  • nodelay:不延迟处理突发请求

2. 使用ngx_http_limit_conn_module模块限制并发连接数

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        location / {
            limit_conn addr 5;
            # 其他配置...
        }
    }
}
  • zone=addr:10m:创建名为addr的共享内存区,大小10MB
  • limit_conn addr 5:每个IP最多5个并发连接

Apache限制IP并发访问

1. 使用mod_evasive模块(防DDOS)

LoadModule evasive20_module modules/mod_evasive24.so

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        10
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
    DOSEmailNotify      admin@example.com
</IfModule>
  • DOSPageCount:同一页面每秒请求数阈值
  • DOSSiteCount:同一站点每秒总请求数阈值
  • DOSBlockingPeriod:封锁时间(秒)

2. 使用mod_limitipconn模块限制并发连接

LoadModule limitipconn_module modules/mod_limitipconn.so

<IfModule mod_limitipconn.c>
    <Location />
        MaxConnPerIP 5
        NoIPLimit image/*
    </Location>
</IfModule>
  • MaxConnPerIP 5:每个IP最多5个并发连接
  • NoIPLimit image/*:对图片文件不做限制

3. 使用mod_qos模块

LoadModule qos_module modules/mod_qos.so

<IfModule mod_qos.c>
    QS_ClientEntries 1000
    QS_SrvMaxConnPerIP 10
    QS_SrvMaxConnClose 180
</IfModule>
  • QS_SrvMaxConnPerIP 10:每个IP最多10个并发连接

通用建议

  1. 对于高并发场景,Nginx的性能通常优于Apache
  2. 限制设置应根据实际业务需求调整,避免误伤正常用户
  3. 可以结合防火墙(iptables/nftables)进行更底层的限制
  4. 对于API服务,还可以考虑在应用层实现限流(如Redis+Lua)

需要根据您的具体业务场景选择合适的限制策略和参数值。