Nginx9-请求限制、连接限制模块

相关模块

  1. limit_conn_module
  2. limit_req_module

连接和请求

连接和请求的关系:HTTP请求建立在一次TCP连接的基础上,一次TCP请求至少产生一次HTTP请求

HTTP不版本连接关系

1
2
3
HTTP 1.0       TCP不能复用
HTTP 1.1 顺序TCP复用
HTTP 2.0 多路复用TCP复用

连接限制模块

模块名: limit_conn_module

1
2
3
4
语法:limit_conn_zone key zone=name:seize;
默认:没有进行配置
位置:可以在http下
作用:配置连接限制zone

1
2
3
4
语法:limit_conn key zone number;
默认:没有进行配置
位置:可以在http下、server下、location下
作用:应用该zone

请求限制模块

模块名:limit_req_module

1
2
3
4
语法:limit_req_zone key zone=name:size rate=rate;
默认:没有进行配置
位置:可以在http下
作用:配置请求限制zone

1
2
3
4
语法:limit_req zone=name [burst=number] [nodelay];
默认:没有进行配置
位置:可以在http下 server下 location下
作用:应用请求限制zone

例子(default.conf中测试)

  1. 配置一秒内一个IP只能进行一次连接

  2. 配置一秒内一个IP只能进行一次请求

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
limit_conn_zone $binary_remote_addr zone=conne_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location /{
root /opt/app/code;
index index.html index.htm;
sub_filter "rex" "rexyan";
sub_filter_once off;
sub_filter_last_modified on;
#limit_conn conne_zone 1;
limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
#limit_req zone=req_zone;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}