搜尋
首頁運維NginxNginx 對訪問量的控制

Nginx 對訪問量的控制

Oct 18, 2019 pm 02:44 PM
nginx

目的

了解 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中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
NGINX與Apache:性能,可伸縮性和效率NGINX與Apache:性能,可伸縮性和效率Apr 19, 2025 am 12:05 AM

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

終極攤牌:nginx vs. apache終極攤牌:nginx vs. apacheApr 18, 2025 am 12:02 AM

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

nginx行動:示例和現實應用程序nginx行動:示例和現實應用程序Apr 17, 2025 am 12:18 AM

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

NGINX單元:支持不同的編程語言NGINX單元:支持不同的編程語言Apr 16, 2025 am 12:15 AM

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

在Nginx和Apache之間進行選擇:適合您的需求在Nginx和Apache之間進行選擇:適合您的需求Apr 15, 2025 am 12:04 AM

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

nginx怎麼啟動nginx怎麼啟動Apr 14, 2025 pm 01:06 PM

問題:如何啟動 Nginx?答案:安裝 Nginx啟動 Nginx驗證 Nginx 是否已啟動探索其他啟動選項自動啟動 Nginx

怎麼查看nginx是否啟動怎麼查看nginx是否啟動Apr 14, 2025 pm 01:03 PM

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

nginx怎麼關閉nginx怎麼關閉Apr 14, 2025 pm 01:00 PM

要關閉 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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MantisBT

MantisBT

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

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