nginx限速怎么实现

发布时间 - 2023-05-16 00:00:00    点击率:

nginx限速可以通过 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块来实现限速的功能。

一、ngx_http_limit_conn_module :

  该模块主要限制下载速度。

1、并发连接限制:

http
{
    ...
    limit_conn_zone $binary_remote_addr zone=aming:10m;
    ...
    server
    {
        ...
        limit_conn aming 10;
        ...   
    }
}
说明:首先用limit_conn_zone定义了一个内存区块索引aming,大小为10m,它以$binary_remote_addr作为key。
该配置只能在http里面配置,不支持在server里配置。

limit_conn 定义针对aming这个zone,并发连接为10个。在这需要注意一下,这个10指的是单个IP的并发最多为10个。

2、速度限制:

location ~ /download/ {
    ...
    limit_rate_after 512k;
    limit_rate 150k;
    ...
}
说明:limit_rate_after定义当一个文件下载到指定大小(本例中为512k)之后开始限速;
limit_rate 定义下载速度为150k/s。

注意:这两个参数针对每个请求限速。

二、ngx_http_limit_req_module:

该模块主要用来限制请求数。

1、limit_req_zone:

语法: limit_req_zone $variable zone=name:size rate=rate;
默认值: none
配置段: http

设置一块共享内存限制域用来保存键值的状态参数。 特别是保存了当前超出请求的数量。 
键的值就是指定的变量(空值不会被计算)。
如limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

说明:区域名称为one,大小为10m,平均处理的请求频率不能超过每秒一次,键值是客户端IP。
使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。
如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。
速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,
所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。

2、limit_req

语法: limit_req zone=name [burst=number] [nodelay];
默认值: —
配置段: http, server, location

设置对应的共享内存限制域和允许被处理的最大请求数阈值。 
如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以所有的请求都是以定义的频率被处理的。 
超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,
这时,这个请求会被终止,并返回503 (Service Temporarily Unavailable) 错误。

这个阈值的默认值为0。如:
limit_req_zone $binary_remote_addr zone=aming:10m rate=1r/s;
server {
    location /upload/ {
        limit_req zone=aming burst=5;
    }
}

限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。

如果不希望超过的请求被延迟,可以用nodelay参数,如:

limit_req zone=aming burst=5

示例:

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

    server {
        location  ^~ /download/ {  
            limit_req zone=aming burst=5;
        }
    }
}

设置白名单:

如果是针对公司内部IP或者lo(127.0.0.1)不进行限速,如何做呢?这就要用到geo模块了。

假如,预把127.0.0.1和192.168.100.0/24网段设置为白名单,需要这样做。
在http { }里面增加:
geo $limited {
    default 1;
    127.0.0.1/32 0;
    192.168.100.0/24 0;
}

map $limited $limit {
    1 $binary_remote_addr;
    0 "";
}

原来的 “limit_req_zone $binary_remote_addr ” 改为“limit_req_zone $limit”

完整示例:

http {
    geo $limited {
        default 1;
        127.0.0.1/32 0;
        192.168.100.0/24 0;
    }

    map $limited $limit {
        1 $binary_remote_addr;
        0 "";
    }
    
    limit_req_zone $limit zone=aming:10m rate=1r/s;

    server {
        location  ^~ /download/ {  
            limit_req zone=aming burst=5;
        }
    }
}


# nginx  # 并发  # 下载速度  # 设置为  # 键值  # 默认值  # 如果你  # 超过了  # 在这  # 可以用  # 这就  # 这两个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在景安服务器上快速搭建个人网站?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Python结构化数据采集_字段抽取解析【教程】  如何用好域名打造高点击率的自主建站?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  JavaScript如何实现路由_前端路由原理是什么  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何快速完成中国万网建站详细流程?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在橙子建站中快速调整背景颜色?  如何快速打造个性化非模板自助建站?  Laravel如何升级到最新版本?(升级指南和步骤)  如何在阿里云完成域名注册与建站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  SQL查询语句优化的实用方法总结  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  香港网站服务器数量如何影响SEO优化效果?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Bootstrap CSS布局之列表  如何在阿里云虚拟主机上快速搭建个人网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Linux系统命令中screen命令详解  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  如何在Tomcat中配置并部署网站项目?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  java中使用zxing批量生成二维码立牌  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何在阿里云香港服务器快速搭建网站?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何正确选择百度移动适配建站域名?  如何基于云服务器快速搭建个人网站?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  香港服务器建站指南:免备案优势与SEO优化技巧全解析  jQuery 常见小例汇总  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法