目的
了解 Nginx 的 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模組,對請求存取量進行控制。
推薦教學:nginx教學
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 中的變量,通常為$binary_remote_addr | $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 表示每秒的下載速度;
● limit_rate_after
語法:limit_rate_after size
#設定上下文:http,server,location
說明:此指令和limit_rate 配合,當流量超過size 之後,limit_rate 才開始生效
簡單設定範例
limit_conn_zone $binary_remote_addr zone=addr:10m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /ip { limit_conn_status 503; # 超限制后返回的状态码; limit_conn_log_level warn; # 日志记录级别 limit_rate 50; # 带宽限制 limit_conn addr 1; # 控制并发访问 } # 当超过并发访问限制时,返回503错误页面 error_page 503 /503.html; }
ngx_http_limit_req_module 模組
說明#########此模組主要控制單位時間內的請求數。使用「leaky bucket」 (漏斗) 演算法進行過濾,在設定好限制rate 之後,當單位時間內請求數超過rate 時,模組會偵測burst 值,如果值為0,則請求會依據delay|nodelay 配置傳回錯誤或進行等待;如果burst 大於0 時,當請求數大於rate 但小於burst 時,請求進入等待佇列進行處理。 ######參數設定######● limit_req_zone######語法:limit_req_zone key zone=name:size rate=rate#######設定上下文:http#######說明:key 是Nginx 中的變量,通常為$binary_remote_addr | $server_name;name 為共享記憶體的名稱,size 為該共享記憶體的大小;rate 為存取頻率,單位為r/s 、r/m 。此配置會申請一塊共享記憶體空間name,並且儲存$key 的存取情況;######● limit_req######語法:limit_rate zone=name [burst=number] [nodelay|delay=number] ######設定上下文:http,server,location######說明:開啟限制,burst 設定最多容量,nodelay 決定當請求超量是,是等待處理還是傳回錯誤碼;#### ##limit_req_log_level 和limit_req_status 配置參數左右與ngx_http_limit_conn_module 模塊一致;######簡單配置示例###limit_req_zone $binary_remote_addr zone=req:10m rate=2r/m; server { listen 80; server_name www.domain.com; root /path/; index index.html index.htm; location /limit { limit_req zone=req burst=3 nodelay; } # 当超过并发访问限制时,返回503错误页面 error_page 503 /503.html; }######注意#########這兩種訪問控制都需要申請記憶體空間,既然有記憶體空間,當然會存在記憶體耗盡的情況,這時新的請求都會被傳回錯誤,所以當開啟存取量限制時,需要透過監控防止此類情況發生。 ###
小結
透過對 Nginx 模組化架構的簡單介紹,重點了解 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模組的功能和設定參數,實現 Nginx 對請求的並發控制。如有不對,還請指教
以上是Nginx 對訪問量的控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

NGINX和Apache都是強大的Web服務器,各自在性能、可擴展性和效率上有獨特的優勢和不足。 1)NGINX在處理靜態內容和反向代理時表現出色,適合高並發場景。 2)Apache在處理動態內容時表現更好,適合需要豐富模塊支持的項目。選擇服務器應根據項目需求和場景來決定。

NGINX適合處理高並發請求,Apache適合需要復雜配置和功能擴展的場景。 1.NGINX採用事件驅動、非阻塞架構,適用於高並發環境。 2.Apache採用進程或線程模型,提供豐富的模塊生態系統,適合複雜配置需求。

NGINX可用於提升網站性能、安全性和可擴展性。 1)作為反向代理和負載均衡器,NGINX可優化後端服務和分擔流量。 2)通過事件驅動和異步架構,NGINX高效處理高並發連接。 3)配置文件允許靈活定義規則,如靜態文件服務和負載均衡。 4)優化建議包括啟用Gzip壓縮、使用緩存和調整worker進程。

NGINXUnit支持多種編程語言,通過模塊化設計實現。 1.加載語言模塊:根據配置文件加載相應模塊。 2.應用啟動:調用語言運行時執行應用代碼。 3.請求處理:將請求轉發給應用實例。 4.響應返回:將處理後的響應返回給客戶端。

NGINX和Apache各有優劣,適合不同場景。 1.NGINX適合高並發和低資源消耗場景。 2.Apache適合需要復雜配置和豐富模塊的場景。通過比較它們的核心特性、性能差異和最佳實踐,可以幫助你選擇最適合需求的服務器軟件。

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

要關閉 Nginx 服務,請按以下步驟操作:確定安裝類型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服務:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自動啟動(可選):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)