文章摘要
本文介绍了使用Nginx实现限流的多种策略,包括限制每秒请求数、通过连接数限制和地区访问限制,并提供了相应的配置示例。前言
我们知道,通过后台代码可以实现多种方式限流。那么有没有更简单的方式,不用修改代码也能实现限流呢,那就是使用Nginx。
Nginx提供了多种策略可以实现限流的效果。
限制每秒的请求数
通过Nginx内置的ngx_http_limit_req_module 模块,限制客户端的请求速率。
示例:
# 声明一个全局或者server块
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=9r/s;
}
# 使用配置的限速模块
location /ahzoo/api {
limit_req zone=mylimit burst=99 nodelay;
}
参数说明:
-
zone=req_limit:10m:创建10MB内存区域存储IP请求记录 -
rate=9r/s:限制速率为每秒9个请求 -
burst=99:允许99个请求排队等待 -
nodelay:超出速率的请求立即返回503,不延迟处理
从多个维度进行限制:
http {
limit_conn_zone $binary_remote_addr zone=per_ip:10m;
limit_conn_zone $server_name zone=per_server:10m;
server {
limit_conn per_ip 9; # 单IP并发9连接
limit_conn per_server 999; # 服务器总并发999连接
}
}
通过连接数进行限制
通过Nginx内置的ngx_http_limit_conn_module 模块,限制并发连接数。
示例:
http {
limit_conn_zone $remote_addr zone=perip:10m;
}
server {
limit_conn perip 99; # 每个 IP 同时允许99个连接
}
地区访问限制
通过ngx_http_geoip_module 模块,实现区域访问限制。
这个模块需要配合GeoIP库来使用,所以需要提前安装GeoIP库。
示例:
geo $mycountry {
default 0;
country china US 1; # 允许中国和美国的 IP
#set $geoip_city "nj";
}
server {
if ($mycountry != 1) {
return 444; # 如果不在白名单国家,则返回 444
}
}
黑白名单限制
如果需要对具体的IP进行限制,就可以通过设置黑白名单来实现。
示例:
location / {
deny 192.168.0.1; # 黑名单
allow 192.168.1.2; # 白名单
deny all; # 默认拒绝所有其他 IP
}
版权声明
本文依据 CC-BY-NC-SA 4.0 许可协议授权,请您在转载时注明文章来源为 Z次元 ,若本文涉及转载第三方内容,请您一同注明。
评论区
发表评论
这里还没有评论哦
快来发一条评论抢占前排吧
前言
限制每秒的请求数
通过连接数进行限制
地区访问限制
黑白名单限制