目的
了解 Nginx 的 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊,對請求訪問量進行控制。
Nginx 模塊化
nginx 的內部結構是由核心模塊和一系列的功能模塊所組成。模塊化架構使得每個模塊的功能相對簡單,實現高內聚,同時也便于對 Nginx 進行功能擴展。
針對 web 請求,Nginx 所有開啟的模塊會組成一條鏈,類似于闖關游戲中的一道道關卡,每個模塊負責特定的功能,例如實現壓縮的 ngx_http_gzip_module 模塊,實現驗證的 ngx_http_auth_basic_module 模塊和實現代理的 ngx_http_proxy_module 模塊等。連接到服務器的請求,會依次經過Nginx各個模塊的處理,只有通過這些模塊處理之后的請求才會真正的傳遞給后臺程序代碼進行處理。
Nginx 并發訪問控制
對于 web 服務器而言,當遇到網絡爬蟲,或者惡意大流量攻擊訪問時,會造成服務器內存和 CPU 爆滿,帶寬也會跑滿,所以作為成熟的服務器代理軟件,需要可以對這些情況進行控制。
Nginx 控制并發的方法有兩種,一種是通過IP或者其他參數控制其并發量;另外一種是控制單位時間內總的請求處理量。即對并發和并行的控制,這兩個功能分別由 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊負責實現。
ngx_http_limit_conn_module 模塊
說明
該模塊主要用于對請求并發量進行控制。
參數配置
limit_conn_zone
指令配置 limit_conn_zone key zone=name:size
配置的上下文:http
說明:key 是 Nginx 中的變量,通常為 binaryremoteaddr|server_name;name 為共享內存的名稱,size 為該共享內存的大小;此配置會申請一塊共享內存空間 name,并且保存 key 的訪問情況
limit_conn_log_level
語法:limit_conn_log_level info|notice|warn|error
默認值:error
配置上下文:http,server,location
說明:當訪問達到最大限制之后,會將訪問情況記錄在日志中
limit_conn
語法:limit_conn zone_name number
配置上下文:http,server,location
說明:使用 zone_name 進行訪問并發控制,當超過 number 時返回對應的錯誤碼
limit_conn_status
語法:limit_conn_status code
默認值:503
配置上下文:http,server,location
說明:當訪問超過限制 number 時,給客戶端返回的錯誤碼,此錯誤碼可以配合 error_page 等參數,在訪問超量時給客戶返回友好的錯誤頁面
limit_rate
語法:limit_rate rate
默認值:0
配置上下文:http,server,location
說明:對每個鏈接的速率進行限制,rate 表示每秒的下載速度;
新聞熱點
疑難解答