nginx limit配置參數解讀

本文主要解析一下ngx_http_core_module、ngx_http_limit_conn_module以及ngx_http_limit_req_module中的limit相關配置參數。html

limit_rate

名稱 默認配置 做用域 官方說明 中文解讀 模塊
limit_rate limit_rate 0; http, server, location, if in location Limits the rate of response transmission to a client. The rate is specified in bytes per second. The zero value disables rate limiting. The limit is set per a request, and so if a client simultaneously opens two connections, the overall rate will be twice as much as the specified limit. 指定每秒該鏈接能下載的bytes,主要用來限制個別請求的帶寬 ngx_http_core_module
limit_rate_after limit_rate_after 0; http, server, location, if in location Sets the initial amount after which the further transmission of a response to a client will be rate limited. 設置多少bytes事後將啓動limit計數,若是小於此值則不限速 ngx_http_core_module
limit_except 沒有默認值 location Limits allowed HTTP methods inside a location. The method parameter can be one of the following: GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH. Allowing the GET method makes the HEAD method also allowed 設置除了指定的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 Sets the shared memory zone and the maximum allowed number of connections for a given key value. When this limit is exceeded, the server will return the error in reply to a request. 指定一個zone的每一個key最大鏈接數 ngx_http_limit_conn_module
limit_conn_zone 沒有默認值,語法 limit_conn_zone key zone=name:size; http Sets parameters for a shared memory zone that will keep states for various keys. In particular, the state includes the current number of connections. The key can contain text, variables, and their combination. Requests with an empty key value are not accounted. 第一個參數是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 Sets the desired logging level for cases when the server limits the number of connections. This directive appeared in version 0.8.18. 指定當觸發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 Sets the shared memory zone and the maximum burst size of requests. If the requests rate exceeds the rate configured for a zone, their processing is delayed such that requests are processed at a defined rate. Excessive requests are delayed until their number exceeds the maximum burst size in which case the request is terminated with an error. 指定zone的burst大小 ngx_http_limit_req_module
limit_req_zone 沒有默認值,語法 limit_req_zone key zone=name:size rate=rate; http Sets parameters for a shared memory zone that will keep states for various keys. In particular, the state stores the current number of excessive requests. The key can contain text, variables, and their combination. Requests with an empty key value are not accounted. 第一個參數指定key,第二個參數指定zone名稱和元數據的內存大小,第三個參數rate指定單位時間的請求數閾值 ngx_http_limit_req_module
limit_req_log_level limit_req_log_level error; http, server, location Sets the desired logging level for cases when the server refuses to process requests due to rate exceeding, or delays request processing. Logging level for delays is one point less than for refusals. 指定觸發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;
 }
}

doc

相關文章
相關標籤/搜索