You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Nginx限制同时访问指定路径的客户端IP总数?

用Nginx限制特定路径的同时在线客户端IP总数

可以实现这个需求,通过结合Nginx的limit_conn模块和map指令,就能精准限制example.com/download路径的同时在线客户端IP总数,且不限制单个IP的连接数。

实现思路

核心逻辑是标记每个IP的首次连接,仅让首次连接占用IP名额,后续同IP的多连接不消耗名额,以此统计并限制同时在线的唯一IP总数。

具体配置

在Nginx主配置或站点配置文件中添加以下内容:

1. 定义连接计数的Zone

# 记录单个IP的当前连接数(用于判断是否为首次连接)
limit_conn_zone $binary_remote_addr zone=per_ip_conn:10m;

# 记录首次连接的IP数量(用于限制唯一IP总数)
limit_conn_zone $is_new_ip zone=total_ip_count:10m;

2. 用Map标记IP的首次连接

map $connection_count $is_new_ip {
    # 当IP的连接数为1时,标记为首次连接(占用IP名额)
    1 1;
    # 连接数>1时,不标记(不占用名额)
    default 0;
}

3. 在目标Location中应用限制

server {
    server_name example.com;

    location /download {
        # 给单个IP设置足够大的连接上限,确保不限制单IP连接数
        limit_conn per_ip_conn 10000;

        # 限制同时在线的唯一IP总数(此处设为50,可按需调整)
        limit_conn total_ip_count 50;

        # 可选:超过限制时返回的HTTP状态码,默认是503,这里改为429更贴合场景
        limit_conn_status 429;

        # 你的业务配置(比如静态文件根目录、反向代理地址等)
        root /path/to/your/download/files;
    }
}

配置说明

  • per_ip_conn zone:用于统计每个IP的实时连接数,设置极大的连接上限(如10000),确保单个IP的连接数不受限制。
  • map指令:通过$connection_count变量(由limit_conn模块自动提供)判断是否为IP的首次连接,仅首次连接会触发$is_new_ip=1。
  • total_ip_count zone:统计所有首次连接的IP数量,通过limit_conn指令限制总数,达到控制同时在线唯一IP的目的。

验证与生效

修改配置后,执行以下命令验证配置合法性并重载Nginx:

nginx -t
systemctl reload nginx

内容的提问来源于stack exchange,提问作者Mohammad Haghdoost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:15:32