nginx之 nginx限流配置

張衝andy發表於2019-06-21

limit_req zone=req_zone;

嚴格依照在limti_req_zone中配置的rate來處理請求

超過rate處理能力範圍的,直接drop

表現為對收到的請求無延時

limit_req zone=req_zone burst=5;

依照在limti_req_zone中配置的rate來處理請求

同時設定了一個大小為5的緩衝佇列,在緩衝佇列中的請求會等待慢慢處理

超過了burst緩衝佇列長度和rate處理能力的請求被直接丟棄

表現為對收到的請求有延時

limit_req zone=req_zone burst=5 nodelay;

依照在limti_req_zone中配置的rate來處理請求

同時設定了一個大小為5的緩衝佇列,當請求到來時,會爆發出一個峰值處理能力,對於峰值處理數量之外的請求,直接丟棄

在完成峰值請求之後,緩衝佇列不能再放入請求。如果rate=10r/s,且這段時間內沒有請求再到來,則每6 s 緩衝佇列就能回覆一個緩衝請求的能力,直到回覆到能緩衝5個請求位置。



load_module modules/ngx_stream_module.so;   #動態載入模組,必須寫道開頭

user  nginx;   #使用useradd nginx    新增一個nginx使用者

worker_processes  4;   #cpu核心數 * 2

worker_rlimit_nofile   102400;  #配置nginx開啟最大檔案數  (每個工作程式繫結一個cpu,worker_cpu_affinity配置)

worker_cpu_affinity 0001 0010 0100 1000;  #工作程式使用哪個cpu的核心 (以四核為例)  0001是4核的第一個核心 0010是4核的第二個核心 

 

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

error_log  logs/error.log  info;

 

pid        logs/nginx.pid;

 

 

events {

    use epoll;

    worker_connections  10240;

}

 

 

http {

    include       mime.types;

    default_type  application/octet-stream;

 

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

 

    #access_log  logs/access.log  main;   #在server虛擬目錄裡面配置日誌,這裡是全域性日誌

 

    sendfile        on;   

    #tcp_nopush     on;

 

    

 

    server_tokens off;  #錯誤的時候關閉輸出版本號

 

 

    #keepalive_timeout  0;

    keepalive_timeout  30;

 

    gzip  on;   #壓縮會佔用cpu

    gzip_buffers 4 16k;

    gzip_comp_level 3;  #壓縮等級

    gzip_disable "MSIE[1-6]";   #ie瀏覽器1-6禁用gzip

    gzip_min_length 1k;

    gzip_http_version 1.0;

    gzip_types text/plaion application/html application/css application/js;  #可以壓縮的檔案型別

    gzip_vary on;  #根據http頭判斷是否支援壓縮

 

    client_max_body_size 8m;   #預設允許客戶端最大上傳檔案大小

#限流

#limit_conn_zone $binary_remote_addr zone=addr:10m;         #併發限制(同時啟用一個)

limit_req_zone $binary_remote_addr zone=qps:10m rate=1r/s;   #請求限制   每秒鐘處理一個請求

limit_conn_log_level error;

limit_conn_status 503;   #超出限制時,返回狀態碼

server{

#limit_conn addr 1;  #併發限制設定為1,是為了測試 addr是zone空間在53行(同時啟用一個)

#limit_req zone=qps;  #請求限制 

limit_req zone=qps burset=1 nodelay;  #請求限制()

}

#限流end

}



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2648406/,如需轉載,請註明出處,否則將追究法律責任。