本文主要解析一下ngx_http_core_module、ngx_http_limit_conn_module以及ngx_http_limit_req_module中的limit相关配置参数。
一、limit_rate
名称 |
默认配置 |
作用域 |
中文解读 |
模块 |
limit_rate |
limit_rate 0; |
http, server, location, if in location |
指定每秒该连接能下载的bytes,主要用来限制个别请求的带宽 |
ngx_http_core_module |
limit_rate_after |
limit_rate_after 0; |
http, server, location, if in location |
设置多少bytes过后将启动limit计数,如果小于此值则不限速 |
ngx_http_core_module |
limit_except |
没有默认值 |
location |
设置除了指定的http methods外其他method将被限制,允许GET就自动允许HEAD方法 |
ngx_http_core_module |
实例:
location /downloads {
limit_rate_after 1m;
limit_rate 500k;
}
location / {
proxy_pass http://localhost:3000;
limit_except GET {
deny all;
}
}
二、limit_conn
名称 |
默认配置 |
作用域 |
中文解读 |
模块 |
limit_conn |
没有默认值,语法 limit_conn zone number; |
http, server, location |
指定一个zone的每个key最大连接数 |
ngx_http_limit_conn_module |
limit_conn_zone |
没有默认值,语法 limit_conn_zone key zone=name:size; |
http |
第一个参数是key,第二个参数是指定zone及其存放元数据(key,current num of conns per key,zone size)的共享内存大小 |
ngx_http_limit_conn_module |
limit_conn_log_level |
limit_conn_log_level error; |
http, server, location |
指定当触发limit的时候日志打印级别 |
ngx_http_limit_conn_module |
实例:
http {
limit_conn_zone $binary_remote_addr zone=ips:10m;
limit_conn_zone $server_name zone=servers:10m;
limit_conn_log_level notice;
server {
# these limits apply to the whole virtual server
limit_conn ips 10;
# only 1000 simultaneous connections to the same server_name
limit_conn servers 1000;
}
}
三、limit_req
名称 |
默认配置 |
作用域 |
中文解读 |
模块 |
limit_req |
没有默认值,语法 limit_req zone=name [burst=number] [nodelay]; |
http, server, location |
指定zone的burst大小 |
ngx_http_limit_req_module |
limit_req_zone |
没有默认值,语法 limit_req_zone key zone=name:size rate=rate; |
http |
第一个参数指定key,第二个参数指定zone名称和元数据的内存大小,第三个参数rate指定单位时间的请求数阈值 |
ngx_http_limit_req_module |
limit_req_log_level |
limit_req_log_level error; |
http, server, location |
指定触发req limit时打印的日志级别 |
ngx_http_limit_req_module |
实例:
http {
limit_req_zone $binary_remote_addr zone=myreqzone:10m
limit_req_log_level warn;
server {
## 每个ip限定10个连接数
## 正常一个浏览器给每个host开两到三个连接
## 触发的话会返回503
## nodelay表示一上来就直接计算,不经过一些预热后再计算
limit_req zone=myreqzone burst=10 nodelay;
}
}