(007)Nginx的请求限制_配置语法与原理

  1、HTTP协议简介

  简单介绍一下HTTP协议的连接与请求:

  HTTP协议是建立在TCP协议基础之上。HTTP请求先要进行TCP的三次握手,称为TCP的连接。建立好TCP的连接才会进行HTTP请求与响应。也就是在连接的基础之上进行HTTP请求,现在可以在一次连接的基础上建立多次请求。通过发送FIN可ACK包保持连接状态,也就是长连接。HTTP请求建立在一次TCP连接基础上,一次TCP请求至少产生一次HTTP请求。

  不同的HTTP协议版本具有不同的连接关系:HTTP1.0的TCP不能复用,HTTP1.1能顺序性TCP复用,HTTP2.0支持多路复用TCP复用。

  2、请求限制与语法  

  Nginx的请求限制包括两种:limit_conn_module(连接频率限制);limit_req_module(请求频率限制)

  连接频率限制语法:

  Syntax:limit_conn_zone key zone=name:size;
  Default:-
  Context:http

  Syntax:limit_conn zone number;
  Default:-
  Context:http,server,location

  请求频率限制语法:

  Syntax:limit_req_zone key zone=name:size rate=rate;
  Default:-
  Context:http

扫描二维码关注公众号,回复: 11177036 查看本文章

  Syntax:limit_req zone=name [burst=number][nodelay];
  Default:-
  Context:http,server,location

  3、演示

  新建页面:/opt/app/code/1.html

<html>
<head>
    <meta charset="utf-8">
    <title>imooc1</title>
</head>
<body style="background-color:red;">
</body>
</html>

  修改配置文件 /etc/nginx/conf.d/default.conf

limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
location / {
  root   /opt/app/code;
  index  index.html index.htm;
}

  

  配置解析:对于同一个客户端IP地址过来的请求,限制为1秒发起一个。zone大小设置为1M。$remote_addr与$binary_remote_addr都表示客户端IP,$binary_remote_addr更节省空间。 

  重新加载配置文件

nginx -s reload -c /etc/nginx/nginx.conf

  压测,总共发起40个请求,同时并发请求20个,每秒完成5983.55个请求

ab -n 40 -c  20 http://192.168.7.151/1.html

  

  配置 limit_req zone=req_zone;  

  

  重新加载配置文件后,再次执行上面的压测语句:发现限制生效

  

  

  配置 limit_req zone=req_zone burst=3 nodelay; 或者 limit_req zone=req_zone burst=3; 客户端在超过了指定的速率后遗留的3个放到下一秒执行,对客户端起到访问限速的作用,延迟响应,只有3个是延迟的其他的nodelay,直接返回。

  

  重新加载配置文件后,再次执行上面的压测语句:发现限制生效。

  

  配置 limit_conn conn_zone 1;限制服务端同一时刻只允许一个IP的连接过来。

  

  重新加载配置文件后,再次执行上面的压测语句:发现限制生效。因为限制的是连接,一次连接可以进行多次请求。

   

  

  

猜你喜欢

转载自www.cnblogs.com/javasl/p/12823504.html