nginx 限速

limit_rate

Syntax:	limit_rate rate;
Default: limit_rate 0;
Context: http, server,  location,if in location

限制单个连接的速度。

配置示例:

location / {
    root   html;
    index  index.html index.htm;
    expires  300s;
    more_set_headers 'Server: test1.1';
    limit_rate 1024k;
}

可以通过变量$limit_speed 来设置连接速率

server {
    if ($slow) {
        set $limit_rate 4k;
    }
}

也可以通过携带X-Accel-Limit_Rate 头部来限制。

limit_speed

根据连接信息来限制连接速率, 包含limit_speed_zonelimit_speed 两个配置

注:一般使用 $binary_remote_addr 来划分zone, 理论上也可通过其他变量来划分。

limit_speed_zone:

Syntax: limit_speed_zone zone_name $variable memory_max_size
Default: no
Context: http

limit_speed:

Syntax: limit_speed zone_name max_speed
Default: no
Context: http, server, location

配置示例:

http {
    limit_speed_zone   one  $binary_remote_addr  10m;

    server {
        location /download/ {
            limit_speed   one  100k;
        }
    }
}
Nginx 提供了多种限速方法和配置方式,以下是一些常见的限速配置: ### 基于速率的限速配置 #### 简单速率限制 可以通过 `limit_rate` 指令直接限制下载速度。例如,若要对所有请求进行限速,可在 `server` 块或 `location` 块中添加如下配置: ```nginx location / { limit_rate 100k; # 限定下载速度为 100k } ``` #### 按流量大小后限速 使用 `limit_rate_after` 和 `limit_rate` 结合,可实现先让一定流量通过,之后再进行限速。例如,对 `/upload/` 路径下的资源,流量超过 1000k 后开始限速: ```nginx location /upload/ { limit_rate_after 1000k; limit_rate 100k; } ``` 此配置针对该路径下的视频等资源,先让 1000k 流量通过,之后以 100k 的速度进行限速 [^1]。 ### 基于并发连接数的限速配置 #### 限制同一 IP 的并发连接数 通过 `limit_conn_zone` 和 `limit_conn` 指令,可限制同一 IP 的并发连接数。例如: ```nginx limit_conn_zone $binary_remote_addr zone=addr:10m; server { location /abc { limit_conn addr 1; # 限制同一 IP 并发为 1 limit_rate 100k; # 下载速度为 100K } } ``` 这里 `limit_conn_zone` 定义了一个存储会话状态的共享内存区域,`limit_conn` 用于指定每个 IP 的最大连接数 [^4]。 ### 针对突发请求的限速配置 使用 `limit_req_zone` 和 `limit_req` 指令可对突发请求进行限速。例如,每处理一次请求,对突发超过 5 个以后的请求放入缓存区: ```nginx http { limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s; server { location /search/ { limit_req zone=baism burst=5 nodelay; } } } ``` 其中 `limit_req_zone` 定义了一个请求速率限制区域,`limit_req` 用于应用这个速率限制 [^4]。 ### 流媒体视频流限速配置 对于流媒体视频流,可采用如下配置: ```nginx http { include mime.types; default_type application/octet-stream; server_tokens off; sendfile on; keepalive_timeout 65; limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 81; server_name localhost; charset utf-8; location / { root html; index index.html index.htm; } location /a { limit_conn addr 1; # 同一 IP 同一时间下载连接数 limit_rate 100k; # 下载最大速率 limit_rate_after 250m; # 下载到多少时开始限速 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } ``` 在这个配置中,`/a` 路径下的视频下载,会限制同一 IP 同一时间只有 1 个下载连接,下载到 250m 时开始限速,最大下载速率为 100k [^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值