nginx限制处理窗口数量,进而限制请求的并发量和限速(ab压测测试)

nginx限制处理窗口数量,进而限制请求的并发量和限速(ab压测测试)

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

http {

...

    limit_req_zone $binary_remote_addr zone=aming1:10m rate=1r/s;   #添加,请求时候会限速,一秒处理一个

...

    include vhost/*.conf;      #添加

}

[root@localhost ~]# cat /usr/local/nginx/conf/vhost/www.1.conf

server{

    listen 80;

    server_name www.1.com;

    root /data/wwwroot/www.1.com;

    index index.html;

    limit_req zone=aming1 burst=5;       

  #burst=5相当于,银行开放5个窗口,同时能处理5个, rate=1r/s相当于每个窗口的业务员处理能力,1秒处理1个request请求

}

[root@localhost ~]# cat /etc/hosts

192.168.171.132 www.1.com

[root@localhost ~]# > /usr/local/nginx/logs/access.log

[root@localhost ~]# ab -n 10 -c 10 -I http://www.1.com/    #ab压力并发测试,-n总请求数, -c并发数  注意:因为设置了限速,所以请求后,会持续一段时间(1秒处理一个)

查看日志查看并发处理数:因为设置了只开放5个窗口,相当于只能并发5个,当实际过来的并发是10个的时候,会只能处理5个,剩下5个则需要排队,在同一时间没法进行处理503错误。

[root@localhost ~]# cat /usr/local/nginx/logs/access.log     #查看日志,有6个200的是能处理的,4个503是不能处理的,因为第一个请求过来就处理了,后面才开始排队

192.168.171.132 - - [26/Dec/2020:11:11:08 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:08 +0800] "GET / HTTP/1.0" 503 197 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:08 +0800] "GET / HTTP/1.0" 503 197 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:08 +0800] "GET / HTTP/1.0" 503 197 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:08 +0800] "GET / HTTP/1.0" 503 197 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:09 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:10 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:11 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:12 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:11:13 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

调高burst的窗口数量,同样并发10个时候,则一次就能处理完:

[root@localhost ~]# cat /usr/local/nginx/conf/vhost/www.1.conf

server{

    listen 80;

    server_name www.1.com;

    root /data/wwwroot/www.1.com;

    index index.html;

    limit_req zone=aming1 burst=100;       

  #burst=100相当于,银行开放100个窗口,同时能处理100个, rate=1r/s相当于每个窗口的业务员处理能力,1秒处理1个request请求

}

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

[root@localhost ~]# > /usr/local/nginx/logs/access.log

[root@localhost ~]# ab -n 10 -c 10 -I http://www.1.com/    #ab压力并发测试,-n总请求数, -c并发数,注意:因为设置了限速,所以请求后,会持续一段时间(1秒处理一个)

查看日志查看并发处理数:因为设置提高是并发窗口数量,一次能处理100个,当并发是10个时候,肯定就直接都能被处理,不会有503错误。

[root@localhost ~]# cat /usr/local/nginx/logs/access.log

192.168.171.132 - - [26/Dec/2020:11:17:48 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:49 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:50 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:51 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:52 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:53 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:54 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:55 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:56 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

192.168.171.132 - - [26/Dec/2020:11:17:57 +0800] "GET / HTTP/1.0" 200 6 "-" "ApacheBench/2.3"

注意:

limit_req_zone:    语法: limit_req_zone $variable zone=name:size rate=rate;

设置一块共享内存限制域用来保存键值的状态参数。 特别是保存了当前超出请求的数量。

键的值就是指定的变量(空值不会被计算)。

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

说明:区域名称为one,大小为10m,平均处理的请求频率不能超过每秒一次,键值是客户端IP。

使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。

如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,

所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。

limit_req:     这个阈值的默认值为0。如:

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

server {

    location /upload/ {

        limit_req zone=aming burst=5;

    }

}

限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。

如果不想限速,在burst后面添加参数: nodelay;   如: limit_req zone=aming burst=5 nodelay;

安装ab命令:   # yum -y install httpd-tools   #即可安装ab命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要计算nginx并发处理,需要考虑多个因素,包括硬件配置、网络带宽和nginx的配置参数。其中,nginx的配置参数可以通过修改nginx.conf文件来调整。 在nginx.conf文件中,可以通过配置worker_processes参数来指定worker进程的数量。每个worker进程都可以处理多个并发请求。同时,还可以通过修改worker_connections参数来限制每个worker进程的最大并发连接数。 除了这些配置参数,还可以通过其他配置和优化操作提高nginx并发处理能力,例如启用缓存、缩和负载均衡等。 根据引用中的配置信息,可以看到安装并配置nginx的过程,但是没有提供具体的worker_processes和worker_connections参数的设置。因此,无法直接确定nginx并发处理。 为了更准确地计算nginx并发处理,需要结合实际的硬件配置和网络环境。可以通过性能测试工具,如ab、wrk等,来模拟并发请求nginx处理能力。在测试过程中,可以逐步调整worker_processes和worker_connections参数,并监控系统资源使用情况,以找到最佳的配置值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [源码编译Nginx服务器及其配置与应用](https://blog.csdn.net/qq_35456705/article/details/113207253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维实战帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值