解读Linux下nginx服务中limit配置参数

本文主要解析一下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;
 }
}

猜你喜欢

转载自blog.csdn.net/qq_42303254/article/details/89517365