搜索
首页运维NginxNginx反向代理中基于时间窗口的访问控制

Nginx反向代理中基于时间窗口的访问控制

Jun 10, 2023 pm 12:01 PM
nginx反向代理时间窗口

随着互联网的发展,越来越多的应用程序部署在云端,如何保证云端服务的安全性和稳定性成为了关键问题。其中,Nginx作为一个高性能的Web服务器和反向代理,广泛应用于云端服务的部署和管理中。在实际应用中,有些场景下需要对访问进行限制,例如频繁访问的IP,恶意访问的请求,大流量的访问等等。本文将介绍一种基于时间窗口的访问控制方法,通过限制在一定时间内的访问次数,保证云端服务的安全性和稳定性。

一、什么是时间窗口

时间窗口是指在一定时间内对事件进行限制的方法。在访问控制中,可以根据时间窗口对访问进行限制,例如:1分钟内最多访问10次,5分钟内最多访问100次,1个小时最多访问1000次等。时间窗口可以根据实际情况进行调整,具有灵活性和可定制性。

二、Nginx反向代理中的时间窗口访问控制

  1. 安装ngx_http_limit_req_module模块

在使用nginx时间窗口访问控制之前,需要安装ngx_http_limit_req_module模块。该模块可以控制同一时间段内客户端请求到达的频率。通常我们安装nginx时会同时安装该模块,如果没有安装则需要重新编译安装nginx,安装方式如下:

$ wget http://nginx.org/download/nginx-1.14.0.tar.gz

$ tar zxvf nginx-1.14.0.tar.gz

$ cd nginx-1.14.0/

$ ./configure --prefix=/usr/local/nginx --add-module=../nginx-limit-req-module-master

$ make

$ sudo make install
  1. 配置Nginx反向代理

在Nginx反向代理的配置文件中加入以下内容:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server{
    ...
    location /{
        limit_req zone=one burst=5;
        proxy_pass http://backend;
    }
}

该配置中,limit_req_zone定义了限制区域one,其中10m是内存大小,可以根据实际需要进行调整。rate=1r/s定义了每秒钟处理一个请求。在location中添加了limit_req zone=one burst=5,表示当超过1秒钟1个请求的数量时,会将多余的请求以5个请求为峰值在后续时间内处理。

  1. 验证时间窗口访问控制

配置完成后,可以使用ab工具进行测试,如下:

$ ab -n 100 -c 10 http://localhost/

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Finished 100 requests

该命令意为:发送100个请求,并发数为10个。测试结果:如果在1秒钟内发送10个请求,则其余的请求将会被限制,产生429错误,如下:

$ ab -n 100 -c 10 http://localhost/

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Finished 100 requests

Server Software:        nginx/1.14.0
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      10
Time taken for tests:   0.062 seconds
Complete requests:      100
Failed requests:        9
   (Connect: 0, Receive: 0, Length: 0, Exceptions: 9)
Non-2xx responses:      9
Requests per second:    1617.28 [#/sec] (mean)
Time per request:       6.173 [ms] (mean)
Time per request:       0.617 [ms] (mean, across all concurrent requests)
Transfer rate:          0.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.2      1       1
Processing:     1    5   9.8      3      47
Waiting:        1    5   9.8      3      47
Total:          1    6   9.8      4      47

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      5
  80%      6
  90%     15
  95%     47
  98%     47
  99%     47
 100%     47 (longest request)

三、总结

在云端服务的部署和管理中,访问控制至关重要。通过Nginx反向代理中基于时间窗口的访问控制,可以有效地控制访问频率,保证云端服务的安全性和稳定性。该方法不仅可以限制频率较高的请求,还可以对恶意访问的请求进行限制,有效地提高了云端服务的可靠性和安全性。

以上是Nginx反向代理中基于时间窗口的访问控制的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
终极摊牌:nginx vs. apache终极摊牌:nginx vs. apacheApr 18, 2025 am 12:02 AM

NGINX适合处理高并发请求,Apache适合需要复杂配置和功能扩展的场景。1.NGINX采用事件驱动、非阻塞架构,适用于高并发环境。2.Apache采用进程或线程模型,提供丰富的模块生态系统,适合复杂配置需求。

nginx行动:示例和现实应用程序nginx行动:示例和现实应用程序Apr 17, 2025 am 12:18 AM

NGINX可用于提升网站性能、安全性和可扩展性。1)作为反向代理和负载均衡器,NGINX可优化后端服务和分担流量。2)通过事件驱动和异步架构,NGINX高效处理高并发连接。3)配置文件允许灵活定义规则,如静态文件服务和负载均衡。4)优化建议包括启用Gzip压缩、使用缓存和调整worker进程。

NGINX单元:支持不同的编程语言NGINX单元:支持不同的编程语言Apr 16, 2025 am 12:15 AM

NGINXUnit支持多种编程语言,通过模块化设计实现。1.加载语言模块:根据配置文件加载相应模块。2.应用启动:调用语言运行时执行应用代码。3.请求处理:将请求转发给应用实例。4.响应返回:将处理后的响应返回给客户端。

在Nginx和Apache之间进行选择:适合您的需求在Nginx和Apache之间进行选择:适合您的需求Apr 15, 2025 am 12:04 AM

NGINX和Apache各有优劣,适合不同场景。1.NGINX适合高并发和低资源消耗场景。2.Apache适合需要复杂配置和丰富模块的场景。通过比较它们的核心特性、性能差异和最佳实践,可以帮助你选择最适合需求的服务器软件。

nginx怎么启动nginx怎么启动Apr 14, 2025 pm 01:06 PM

问题:如何启动 Nginx?答案:安装 Nginx启动 Nginx验证 Nginx 是否已启动探索其他启动选项自动启动 Nginx

怎么查看nginx是否启动怎么查看nginx是否启动Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx怎么关闭nginx怎么关闭Apr 14, 2025 pm 01:00 PM

要关闭 Nginx 服务,请按以下步骤操作:确定安装类型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服务:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自动启动(可选):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst

nginx在windows中怎么配置nginx在windows中怎么配置Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版