相关模块
- limit_conn_module
- 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中测试)
配置一秒内一个IP只能进行一次连接
配置一秒内一个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; #} }
|