返回顶部
首页 > 资讯 > 精选 >Nginx中如何使用limit模块限制并发数
  • 122
分享到

Nginx中如何使用limit模块限制并发数

2023-06-04 13:06:42 122人浏览 泡泡鱼
摘要

小编给大家分享一下Nginx中如何使用limit模块限制并发数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! nginx 限制ip并发数,nginx限制IP连接数的范例参考:如何Nginx限制同一个ip的连接数,限制并发数

小编给大家分享一下Nginx中如何使用limit模块限制并发数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!




nginx 限制ip并发数,nginx限制IP连接数的范例参考:

如何Nginx限制同一个ip的连接数,限制并发数目:

添加limit_zone和limit_req_zone 这个变量只能在Http使用 :

vi /export/servers/nginx/conf/nginx.conf limit_zone one $binary_remote_addr 20m;limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;

添加limit_conn 和limit_req 这个变量可以在http, server, location使用 我是限制nginx上的所有服务,所以添加到http里面 (如果你需要限制部分服务,可在nginx/conf/domains里面选择相应的server或者location添加上便可)

vi /export/servers/nginx/conf/nginx.conf limit_zone one $binary_remote_addr 20m;limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;limit_conn one 10;limit_req zone=req_one burst=120;

参数详解(数值按具体需要和服务器承载能力设置,):

limit_zone,是针对每个变量(这里指IP,即$binary_remote_addr)定义一个存储session状态的容器。这个示例中定义了一个20m的容器,按照32bytes/session,可以处理640000个session。limit_req_zone 与limit_zone类似。rate是请求频率. 每秒允许12个请求。limit_conn  one 10 : 表示一个IP能发起10个并发连接数limit_req: 与limit_req_zone对应。burst表示缓存住的请求数。

范例:

http{limit_zone one $binary_remote_addr 20m;limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;limit_conn   one 10;limit_req   zone=req_one burst=120;server  {         listen 80;        server_name     status.xxx.com ;        location / {                 stub_status            on;                 access_log             off;        }}}

重启nginx

/export/servers/nginx/sbin/nginx -s reload

Nginx限制流量/限制带宽 具体参考官方文档

关于limit_zone
关于limit_req

nginx白名单设置

以上配置会对所有的ip都进行限制,有些时候我们不希望对搜索引擎的蜘蛛或者某些自己的代理机过来的请求进行限制, 对于特定的白名单ip我们可以借助geo指令实现。

先在nginx的请求日志进行统计,查看那个ip的访问量比较大, 运行:

 cat access.log | grep "03/Jun" |awk '{print $1}'|sort |uniq -c|sort -nrk 1|head -n 10 #列出访问日志里面在6月3号这天前10个访问量最大的ip.

接下来就可以对这些IP进行分析了。看哪些需要进行白名单设置。

 http{     geo $limited { # the variable created is $limited default 1; 127.0.0.1/32 0; 10.12.212.63 0;    }    map $limited $limit { 1 $binary_remote_addr; 0 "";    }    limit_zone one $binary_remote_addr 20m;    limit_req_zone $limit zone=req_one:20m rate=20r/s;    limit_conn   one 10;    limit_req   zone=req_one burst=120;}

上面两个需要用到map和geo模块,这是nginx自带的模块,有的运维喜欢把他们关闭,自己./sbin/nginx -V 留意一下。把配置的--whithout-XXX-module 去掉重新编译一下就可以了。 上面这段配置的意思是:

geo指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0

使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真实的ip,这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问

PS:

获取客户端的真实IP

顺带一提,为了获取客户端的真实IP。该模块需要安装read_ip模块,运维应该默认有安装。没有的话也可自行安装: 配置方式相当简单,重新编译 Nginx 加上 --with-http_realip_module 参数,如:

./configure --prefix=/opt/nginx --with-http_stub_status_module  --with-pcre=../pcre-6.6 --with-http_realip_modulemakemake install

在server中增加:

set_real_ip_from 192.168.1.0/24;set_real_ip_from 192.168.2.1;real_ip_header     [X-Real-IP|X-Forwarded-For];

需要说明的地方就是设置IP源的时候可以设置单个IP,也可以设置IP段,另外是使用X-Real-IP还是X-Forwarded-For,取决于前面的服务器有哪个头。

set_real_ip_from 设置的IP端可以让运维查看日志,看下你的请求是来自哪些ip段。

重新加载一下服务,差不多就OK了。

再查看日志的话,应该可以看到客户端的真实IP了。

注意:如果未安装该模块的话你的获取到的IP端可能是来自前端代理(如squid)的IP,结果就是多个用户被当成单个用户对待,导致应用不能响应。 参考:http://hi.baidu.com/thinkinginlamp/item/e2cf05263eb4d18e6e2cc3e6

再PS一下: 自测: 有条件的自己可以用ab或者WEBben自测一下。

未安装前压测的话,因为有大量请求,所以access.log会有大量日志,而error.log日志没有变化。

[root@qrwefsdf talk]# webbench  -c 30 -t 30 http://xxx.com  Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benchmarking: GET http://xxx.com  30 clients, running 30 sec.Speed=193468 pages/min, 1254317 bytes/sec.Requests: 96734 susceed, 0 failed.

安装后会发现很多超出的请求会返回503,所以access.log日志变化不快,error.log有大量记录,提示limit_reque缓住了多少请求。

[root@qrwefsdf talk]# webbench  -c 30 -t 30 http://xxxx.com Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benchmarking: GET http://xxx.com  30 clients, running 30 sec.Speed=120 pages/min, 778 bytes/sec.Requests: 60 susceed, 0 failed.



需要注意的是Nginx版本目前是 nginx version: openresty/1.9.3.2
已经不支持limit_zone配置,
改为如下模式
http{
    limit_conn_zone $binary_remote_addr zone=one:20m;
    limit_req_zone $binary_remote_addr zone=req_one:20m rate=1r/s;
    limit_conn one 1;
    limit_req zone=req_one burst=1;

看完了这篇文章,相信你对“Nginx中如何使用limit模块限制并发数”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Nginx中如何使用limit模块限制并发数

本文链接: https://lsjlt.com/news/238112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nginx中如何使用limit模块限制并发数
    小编给大家分享一下Nginx中如何使用limit模块限制并发数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! nginx 限制ip并发数,nginx限制IP连接数的范例参考:如何Nginx限制同一个ip的连接数,限制并发数...
    99+
    2023-06-04
  • 如何使用p-limit限制并发数
    这篇文章主要讲解了“如何使用p-limit限制并发数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用p-limit限制并发数”吧!使用下面是官方提供的使用示例:import ...
    99+
    2023-07-04
  • nginx如何限制php并发数
    要限制PHP并发数,可以使用Nginx的limit_conn_module模块。该模块可以限制对某个特定的location或serv...
    99+
    2023-08-24
    nginx php
  • 使用p-limit 限制并发数源码解析
    目录前言使用源码分析总结前言 并发是指在同一时间内处理的任务数量。例如,在一台服务器上同时运行多个 Web 服务器线程,可以同时处理多个客户端的请求。有时为了程序的稳定运行,我们需要...
    99+
    2022-12-25
    p-limit限制并发数 p limit并发限制
  • Nginx中的upstream模块如何使用
    这篇文章主要介绍“Nginx中的upstream模块如何使用”,在日常操作中,相信很多人在Nginx中的upstream模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx中的upstream...
    99+
    2023-07-05
  • JavaScript使用Promise实现并发请求数限制
    目录没有Promise的并发请求使用Promise限制并发请求使用Promise实现并发请求数限制总结没有Promise的并发请求 在Web开发中,我们经常需要发起多个异步请求来获取...
    99+
    2023-05-16
    JavaScript Promise并发请求限制 Promise限制并发请求 JS promise限制并发
  • 如何用 Nginx 代理 MySQL 连接,并限制可访问IP?
    1.前言 我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。 好巧不巧,线上业务遇到bug了,开发的小...
    99+
    2023-10-08
    nginx mysql tcp/ip
  • 如何用Nginx代理MySQL连接,并限制可访问IP?
    1.前言 我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。 ...
    99+
    2023-09-01
    nginx mysql
  • Python中如何使用随机数模块
    这篇文章给大家介绍Python中如何使用随机数模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。随机整数:>>> import random  >>...
    99+
    2023-06-17
  • Python中如何使用模块级函数
    本篇文章为大家展示了Python中如何使用模块级函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。你不一定要产生一个 `RegexObject` 对象然後再调用它的方法;re 模块也提供了***函数...
    99+
    2023-06-17
  • node中http模块和url模块如何使用
    这篇“node中http模块和url模块如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • JavaScript怎么使用Promise实现并发请求数限制
    本篇内容主要讲解“JavaScript怎么使用Promise实现并发请求数限制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript怎么使用Promise实现并发请求数限制”吧!没有...
    99+
    2023-07-06
  • Python中如何使用mongodb模块
    这篇文章给大家介绍Python中如何使用mongodb模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。涉及到python和mongodb,那么安装相应的模块四必不可少的,最简单的安装...
    99+
    2024-04-02
  • Angular中如何使用HttpClientModule模块
    这篇文章主要介绍Angular中如何使用HttpClientModule模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该模块用于发送 Http 请求,用于发送请求的方法都返回 O...
    99+
    2024-04-02
  • Node.js中如何使用DNS模块
    Node.js中如何使用DNS模块,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. DNS在Node.js中,提供DNS模块,以实现域名...
    99+
    2024-04-02
  • Nodejs中如何使用crypto模块
    本篇文章给大家分享的是有关Nodejs中如何使用crypto模块,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。crypto模块是nodejs的...
    99+
    2024-04-02
  • Node.js 中domain模块如何使用
    这篇文章给大家介绍Node.js 中domain模块如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。异步异常处理异步异常的特点由于node的回调异步特性,无法通过try catc...
    99+
    2024-04-02
  • Node.js中如何使用Cluster模块
    Node.js中如何使用Cluster模块,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.为什么我的应用代码中明明有app....
    99+
    2024-04-02
  • Node.js中如何使用util模块
    本篇文章为大家展示了Node.js中如何使用util模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。util.inheritsuitl.inherits(cons...
    99+
    2024-04-02
  • Node.js中stream模块如何使用
    Node.js中stream模块如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是stream定义流的英文strea...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作