网站首页 > 技术教程 正文
使用ngx_http_limit_req_module限制用户访问
该模块使用的是漏斗算法来进行限制。
官方的配置示例如下:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
参数的简单解释:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
- $binary_remote_addr 用来获取客户端的IP(如果使用负载均衡或CDN时需要进行更改)
- zone=one:10m,设置一个10M的内存空间,用来存储访问的频次信息
- rate=1r/s, 设置访问的频率,现在是1s 一次访问
limit_req zone=one burst=5 nodelay;
- burst, 设置缓存的大小,如果有大量的请求过来时,超过的部分可以先放入缓冲区
- nodelay 超过访问频次而且缓冲区也满了的时候就会直接返回503
测试部分:
我自己写了一个简单的Go脚本进行测试,代码如下
package main
import (
"fmt"
"net/http"
"time"
)
func curl(){
r,err := http.Get("https://www.fengcc.club/")
if err != nil{
fmt.Println(err.Error())
}
fmt.Println(time.Now(), r.Status)
}
func main(){
for i := 0; i < 100; i++{
go curl()
}
time.Sleep(time.Millisecond*4000)
}
100次请求开始的时间为10:48:38.8205601,结束时间为10:48:40.9850476,共有8个请求成功,其他均为503.符合预期.
使用ngx_http_limit_conn_module限制用户请求数
官方示例如下:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
配置和功能和上面的模块类似,就不再介绍。
使用负载均衡和CDN时限制用户的访问
前言:当使用CDN或负载均衡技术时,我们获取的remote_IP,很可能不是客户端的IP,因此我们需要获取客户端的真实IP再去做限制,可以通过"X-Forwarded-For"来获取。
nginx配置如下:
http {
#获取客户端的真实IP
map $http_x_forwarded_for $clientRealIp {
default $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
#设置IP白名单,
geo $whiteiplist {
default 1;
127.0.0.1 0;
134.175.207.203 0;
#221.218.233.79 0;
}
#对内部的IP不设限
map $whiteiplist $all_limit {
1 $clientRealIP;
0 "";
}
#对IP做的限制
limit_conn_zone $all_limit zone=two:10m;
limit_conn two 5;
limit_req_zone $all_limit zone=one:10m rate=2r/s;
server {
location / {
limit_req zone=one burst=5 nodelay;
}
}
}
注:如果不生效,可以尝试重启软件。
猜你喜欢
- 2024-10-11 妙呀!给旧手机安装个nginx,就可以访问网站了?
- 2024-10-11 nginx报错bind() to 0.0.0.0:80 failed 10013access permissions
- 2024-10-11 Nginx防止浏览器下载文件直接打开
- 2024-10-11 Nginx为什么快到根本停不下来?(为什么使用nginx)
- 2024-10-11 关于Nginx服务器下部署Vue项目,报405。解决方案
- 2024-10-11 nginx禁止用户访问.htaccess(nginx禁止访问文件)
- 2024-09-16 nginx访问控制Access Control的问题
- 2024-09-16 配置Nginx的访问控制(nginx访问权限设置)
- 2024-09-16 nginx防盗链,nginx访问控制,nginx代理
- 2024-09-16 nginx 400 状态码问题探究(nginx报错400)
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)