简介

  • Nginx是一个异步框架的Web服务器,也可以用作反向代理,负载均衡器和HTTP缓存,最常用的便是Web服务器。nginx对于预防一些攻击也是很有效的,例如CC攻击,爬虫,本文将介绍限制这些攻击的方法,可以使用nginx的ngx_http_limit_conn_module、ngx_http_limit_req_module这两个模块达到目的,该模块为nginx内置模块,yum安装即有,无需编译安装。本文就介绍nginx这两个模块的使用和细节,希望能够对需要的小伙伴有所帮助。

基本环境介绍

  • 两台机器,192.168.30.105和192.168.30.106均为 1c2g40g配置,106主机提供web服务,105主机部署ab工具。

web服务如下

ab压测获取基础数据

105 ab压测结果

对web服务器index.html页面发送并发为1000总计1000000的请求测试,每个请求建立一个连接
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html

从测试结果来看,请求全部成功;有98%的请求在22ms以内就完成响应,有99%的请求在1007ms以内就完成响应,请求响应的最长时长为31077ms。

nignx ngx_http_limit_conn_module模块

  • 该模块的功能是限制单个ip建立连接的个数。

对nginx进行配置

http {limit_conn_zone $binary_remote_addr zone=one:10m;...server {...location / {limit_conn one 1;}    

限制每个ip连接的个数为一个

测试

对web服务器index.html页面发送并发为1000总计1000000的请求测试
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html

从测试结果来看,请求全部成功;有98%的请求在58ms以内就完成响应,有99%的请求在1008ms以内就完成响应,请求响应的最长时长为31870ms。

测试效果

测试结果无变化,查众多文档,有问题,无答案,估计是个bug。

nignx ngx_http_limit_req_module模块

  • 该模块的功能是限制单个ip请求的个数(请求频率)。

对nginx进行配置

去掉之前limit_conn 配置,添加如下配置

http {limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s;...server {...location / {limit_req zone=two;}    

限制请求的频率为单个ip每秒一个

测试

对web服务器index.html页面发送并发为1000总计1000000的请求测试
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html

从测试结果来看,请求只有55个成功。

测试效果

有效的阻止了用户的请求。

测试过程web服务资源使用情况监控

CPU利用

网络接口流量

TCP连接数状态

总结

  • 从测试的结果以及监控数据来看,limit_conn模块无效,不能起到任何限制作用;limit_req模块能够明显限制用户的请求内容,对于超出限制的请求,给予503的反馈;两者对服务器性能上都没有优化作用,拒绝的请求需要花费更多的硬件资源来处理,CPU消耗增多,接口流出的流量剧增。
  • 测试结果不是很理想,对于文中的错误和不足,欢迎有见识的小伙伴批评指教。

参考文档

  • 官方文档:http://nginx.org/en/docs
  • 使用nginx limit_req限制用户请求速率:https://www.centos.bz/2017/03/using-nginx-limit_req-limit-user-request-rate
  • 关于limit_req和limit_conn的区别:https://blog.csdn.net/u012566181/article/details/49968283
  • ab压力测试报错:https://www.cnblogs.com/felixzh/p/8295471.html
  • ab性能测试结果分析:https://www.cnblogs.com/gumuzi/p/5617232.html
  • Rate Limiting with NGINX and NGINX Plus:https://www.nginx.com/blog/rate-limiting-nginx/

转载于:https://www.cnblogs.com/William-Guozi/p/nginx_limit.html

Nginx:Nginx limit_req limit_conn限速相关推荐

  1. nginx文件服务器html美化,关于nginx:Nginx浏览目录配置及美化

    在我的项目中有一个性能须要在浏览器页面中浏览服务器的目录.服务器应用Nginx,而Nginx提供了相应的ngx_http_autoindex_module 模块,该模块提供了咱们想要的性能. Ngin ...

  2. Nginx —— nginx负载均衡的详细配置 以及 使用案例详解.

    1,话不多说, 这里我们来说下很重要的负载均衡, 那么什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器 ...

  3. Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)

    在linux中,需要使用命令来控制Nginx服务器的启动与停止.重载配置文件.回滚日志文件.平滑升级等行为. 默认情况下,nginx被安装在目录/usr/local/nginx中,其二进制文件路径为/ ...

  4. 解决nginx重启“var/run/nginx/nginx.pid no such file or directory问题

    重启虚拟机后,再次重启nginx会报错"/var/run/nginx/nginx.pid" no such file or directory.google无门, 很多人的方法是: ...

  5. Nginx重启时丢失nginx.pid文件解决方法nginx: [emerg] open() “/var/run/nginx/nginx.pid“ failed (2: No such fi

    nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 不要在 ...

  6. linux平滑升级nginx,Nginx的平滑重启和平滑升级,nginx

    Nginx的平滑重启和平滑升级,nginx Nginx的平滑重启 如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,可以发送系统信号给Nginx主进程的方式来进行.不过,在重启 ...

  7. [Nginx]nginx常用的命令

    nginx常用的命令 使用nginx操作命令前提条件:必须进入nginx的目录 cd /www/local/webserver/nginx/sbin 查看nginx的版本号 ./nginx -v 启动 ...

  8. Nginx 启动报错 “/var/run/nginx/nginx.pid failed”

    问题: 重启虚拟机后,再次重启nginx会报错: open() "/var/run/nginx/nginx.pid" failed (2: No such file or dire ...

  9. rethat linux安装nginx,nginx系列-00-编译安装-CentOS/RedHat

    [TOC] 1 yum源安装 这种方式安装比较简单,不在赘述,yum源如下.如果想在安装的时候定制选项请看下文 编译源码安装的方式. [nginx] name=nginx repo baseurl=h ...

最新文章

  1. Maven国内源设置 - OSChina国内源失效了,别更新了
  2. 如何配置pom.xml用maven打包java工程
  3. 动态规划:连续子数组的最大和
  4. 一次性供应商不能用特别总账标准程序修改
  5. 如何安全的存储用户密码?(中)代码篇
  6. 云炬随笔20210819
  7. 基于灰度变换的图像增强
  8. 【Modern OpenGL】纹理 Textures
  9. Attribute鲜为人知的两个特性记录
  10. FastDFS的介绍
  11. Bug:Google Analytics例子未使用example.com
  12. jira api java,如何使用其余api(java)在jira中创建问题?
  13. 1.4 案例:广告预测、房价预测
  14. iOS 程序上传流程
  15. FDTD Solutions自学整理笔记入门教程(5):仿真时间
  16. java 读取 解析微软Project .mpp 文件
  17. 共议新时代的文化自信与守正创新,第十四届文化中国讲坛举办
  18. 荣耀A55高调上市只为孤独求败?
  19. 你能获得的数据量越大,你能挖掘到的价值就越多。
  20. drony+fiddler抓包

热门文章

  1. mysql为什么不能插入数据_mysql为啥不能插入数据
  2. android 字符串反转,Golang之字符串操作(反转中英文字符串)
  3. java response 获得code_Java教程分享使用HttpClient抓取页面内容
  4. linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?
  5. ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps
  6. java url帮助类_Spring居然还提供了这么好用的URL工具类
  7. c语言奇葩错误,6个奇葩的(hello,world)C语言版(转)
  8. php jquery ajax登录,jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
  9. c# mysql 插入 和 查询_C#对数据库的操作(增删改查)
  10. 运维祈求不宕机_[国庆特辑] 程序员应该求谁保佑才能保证不宕机?