与时俱进,精研业务
编者按:http { ... ... limit_req_zone $binary_remote_addr zone=req_zone:1m rate=10r/s; #限制ip请求设置,访问内存10M,所有访问ip 限制每秒10个请求 limit_conn_zone $binary_remote_addr zone=addr:10m; #限制IP连接设置,连接内存为10M 
nginx可以通过limit_req_zone(限制连接数)和limit_conn_zone(限制并发数)两个组件来控制客户端IP访问目录和文件的频次。在配置之前,我们需要先搞清楚并发和连接的联系和区别。
什么是并发呢?通俗的讲,就是同时运行的请求数。
什么是连接数呢?每个Get或Post请求计算为一次HTTP请求连接。即:访问目标网页时产生的js、css、img及iframe中加载的元素都会计算为http连接数量。很多人认为,访问一次网页就是一个请求,其实不然,除非这个网页是纯粹的文字。
那么并发和连接数两者之间有什么关系呢,两者都是统计请求数,不同的是,并发是统计同时存在的请求数,而连接数则是统计所有已经存在的请求数。
那么问题来了,在某一个时间点,请求了一个网页,同时打开了很多图片,这一时间点,并发数等于连接数吗?这里存在一个同步加载和异步加载的概念,很多时候我们发现网站打开了,还有很多图片是一张一张的慢慢打开;也有一些网站是网站打开后所有图片都打开了,只要有一张图片没打开网站就一直在加载中。前者是异步加载,后者是同步加载,现在网站大多是异步加载了。所以,上述情况的结果:并发可能是三个,连接数则可能是几十个。
了解了并发和连接数联系和区别后,下面我们来根据自己网站实际情况配置代码,示例如下:
http {
...
...
#限制ip请求数量,储存内存10M;每秒之内最多允许共计20个请求数。该段代码只能放在http {}内
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=20r/s;
#限制IP并发连接,储存内存为10M。该段代码只能放在http {}内
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
...
server {
listen 80;
server_name localhost;
location / {
...
#请求轮候队列为5,nodelay表示轮到时直接处理,不会要求重新发起请求。该段代码可放在http, server, location中使用。
limit_req zone=req_zone burst=5 nodelay;
#限制IP并发连接,同一时间最多允许最大连接数10个。该段代码可放在http, server, location中使用。
limit_conn addr 10;
...
}
}
}
(以上均为维护服务器过程中的实操分享,如您有疑问可以添加邓杰律师微信交流)
本文标签:

专注执业领域事务
全力办理委托事项
扎实维护合法权益

24小时免费咨询
请输入您的联系电话,座机请加区号
