Nginx中的limit_req模塊和limit_conn模塊詳解

引言

在高流量場景下,良好的限流和連接控制策略至關重要,以防止服務器過載,確保服務穩定性和高可用性。Nginx 提供了 limit_req 和 limit_conn 模塊,用以實現請求頻率和并發連接數的限制。本文將詳細介紹這兩個模塊的生效階段和生效范圍,并提供實際配置示例,解釋相關指令的作用。

limit_req模塊

功能介紹

limit_req 模塊用于限制客戶端請求的頻率,以防止單一客戶端占用過多服務器資源,提升穩定性。

生效階段

limit_req 在請求處理的“訪問階段(access phase)”生效。它在接收到完整的 HTTP 請求后,即將轉發到后端之前進行限流。

生效范圍

  • http:全局范圍,作用于所有 server 和 location。
  • server:作用于特定 server block 內的所有 location。
  • location:作用于特定 URL 路徑的 location。

配置示例和注釋

http {# 定義一個共享內存區域,用于存儲請求狀態# $binary_remote_addr 是客戶端的 IP 地址# zone=one:10m 定義名為 "one" 的共享內存區域,大小為 10MB# rate=1r/s 限制請求速率為每秒 1 個請求limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {listen 80;server_name example.com;location /api/ {# 應用請求頻率限制配置# zone=one 引用名為 "one" 的共享內存區域# burst=5 允許短時間內突發最多 5 個請求# nodelay 如果設置該參數,突發請求也會立即執行limit_req zone=one burst=5 nodelay;# 代理到后端服務proxy_pass http://backend_service;}}
}

參數解析

  • limit_req_zone:聲明一個限制請求的共享內存區域。
  • limit_req:在指定的區域內啟用請求頻率限制。
  • burst:允許的突發請求數量。
  • nodelay:不延遲處理突發請求。

limit_conn模塊

功能介紹

limit_conn 模塊用于限制每個客戶端的并發連接數,以防止資源被單一客戶端耗盡。

生效階段

limit_conn 在連接處理的“訪問階段(access phase)”生效。當服務器建立新連接時,立即根據配置進行并發連接限制。

生效范圍

  • http:全局范圍,作用于所有 server 和 location。
  • server:作用于特定 server block 內的所有 location。
  • location:作用于特定 URL 路徑的 location。

配置示例和注釋

http {# 定義一個共享內存區域,用于存儲連接狀態# $binary_remote_addr 是客戶端的 IP 地址# zone=addr:10m 定義名為 "addr" 的共享內存區域,大小為 10MBlimit_conn_zone $binary_remote_addr zone=addr:10m;server {listen 80;server_name example.com;location /api/ {# 應用并發連接限制配置# addr 引用名為 "addr" 的共享內存區域# 10 限制每個客戶端最多允許 10 個并發連接limit_conn addr 10;# 代理到后端服務proxy_pass http://backend_service;}}
}

參數解析

  • limit_conn_zone:聲明一個限制連接數的共享內存區域。
  • limit_conn:在指定的區域內啟用連接數限制。

日志和狀態設置

limit_conn_log_level

limit_conn_log_level 用于設置當連接被限制時的日志記錄級別。

可選值
  • info:基本信息記錄。
  • notice:詳細信息記錄。
  • warn:警告信息記錄(推薦)。
  • error:錯誤信息記錄。

limit_conn_status

limit_conn_status 用于設置當連接被限制時返回的 HTTP 狀態碼。

常用狀態碼
  • 503:服務不可用(推薦)。
  • 其他自定義狀態碼:根據具體需求設置。

完整配置示例和注釋

http {# 為 limit_req 和 limit_conn 定義共享內存區域limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;limit_conn_zone $binary_remote_addr zone=addr:10m;# 設置限制被觸發時的日志級別和返回狀態碼limit_conn_log_level warn;limit_conn_status 503;server {listen 80;server_name example.com;location /api/ {# 應用請求頻率限制配置limit_req zone=one burst=5 nodelay;# 應用并發連接限制配置limit_conn addr 10;# 代理到后端服務proxy_pass http://backend_service;}}
}

解析與說明

  • limit_req_zone 和 limit_conn_zone:分別定義請求和連接限制的共享內存區域。
  • limit_req 和 limit_conn:在指定的區域內啟用請求頻率和連接數限制。
  • limit_conn_log_level 和 limit_conn_status:分別設置連接限制觸發時的日志級別和返回狀態碼。

結論

通過 Nginx 的 limit_req 和 limit_conn 模塊,可以有效實現精確的請求頻率和連接數控制。這不僅可以防止惡意請求和流量激增對服務器的沖擊,還能提高服務的穩定性和可用性。結合日志級別和狀態碼設置,可以輕松監控和管理限流情況。

希望這篇博客能夠幫助你更好地理解和應用 Nginx 的限流功能,提高配置能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18316.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TikTok電商帶貨特訓營,跟隨時代潮流,跨境掘金(8節課)

課程內容: 1-先導課 2-一、店鋪運營認知與思路 3-二、店鋪風控注意事項 4-三、美區Tiktok前期工作-1店鋪入駐模式 5-三、美區Tiktok前期工作-2指紋瀏覽器介紹 6-三、美區Tiktok前期工作-4綁定電話號碼 7-三、美區Tiktok前期工作-5添加倉庫地址 8-三、美區Ti…

GIS讀研與求職準備:植被定量遙感專業研0

本文介紹植被定量遙感專業研究生入學初期,為將來從事開發類工作所作求職準備的規劃路徑、方向選擇等方面的建議。 前面提到了,最近有很多師弟師妹詢問關于研究生方向選擇、求職準備等方面的問題。因為很多朋友的提問比較有共性,所以會在征得對…

【秒殺系統】從零開始打造簡易秒殺系統(一):防止超賣

【秒殺系統】從零開始打造簡易秒殺系統(一):防止超賣 前言 大家好,好久不發文章了。(快一個月了- -)最近有很多學習的新知識想和大家分享,但無奈最近項目蠻忙的,很多文章寫了一半擱…

redis筆記1

1-nosql(非關系型數據庫) 定位緩存,提高數據讀寫速度,減輕對數據儲存與訪問壓力,不建議存敏感數據(重要數據)。 2-特征 (1)鍵值(key-value)型 &a…

【面試】Oracle JDK和Open JDK什么關系?

目錄 1. 起源與發展2. 代碼與許可3. 功能與組件4. 使用場景5. 版本更新與支持 1. 起源與發展 1.Oracle JDK是由Oracle公司基于Open JDK源代碼開發的商業版本。2.Open JDK是java語言的一個開源實現。 2. 代碼與許可 1.Oracle JDK包含了閉源組件,并根據二進制代碼許…

深入Java:JSON解析與操作的藝術

哈嘍,大家好,我是木頭左! 一、初識JSON:數據格式的優雅舞者 在現代Web開發中,JSON(JavaScript Object Notation)以其輕量級和易于閱讀的特點成為了數據交換的首選格式。它基于JavaScript的一個…

用最通俗的話理解什么是協程

參考: 用最通俗的話理解什么是協程-CSDN博客

FreeRTOS_信號量_學習筆記

信號量的特性 消息隊列用于傳輸多個數據,但是有時候我們只需要傳遞狀態,這個狀態值需要用一個數值表示。套用隊列筆記中的流水線例子,可以理解為流水線上工件的數量。 信號:起通知作用 量:還可以用來表示資源的數量 當…

打印機手動雙面打印技巧

一、WORD和PDF (1)首先選擇要打印的頁面范圍,然后選擇僅奇數頁打印 (2)將打印完的紙張翻過來,白紙朝上,紙張的頭部先放入打印機 (3)選擇要打印的頁面范圍,然…

oracle.jdbc.OracleDatabaseException: ORA-00911: 無效字符

先吐槽一句,oracle 真坑啊! 一個很正常的sql 語句一直報 ORA-00911: 無效字符 ,拿到數據庫去執行一點問題沒有,一運行代碼就報錯,然后一個字符一個字符的對比,竟然是因為sql 結尾的一個 ";" 導致…

TP6開發文檔概述

TP6(ThinkPHP 6)是一個使用PHP語言開發的快速、兼容且簡單的面向對象開發框架。以下是一個簡化的TP6開發文檔概述,涵蓋了核心功能和一些常用方法: 一、環境準備 PHP安裝:確保已經安裝了與TP6兼容的PHP版本。 Composer…

PHPIPAM在建立數據庫階段報錯

如題,參考大佬的操作IP地址管理系統phpipam部署-CSDN博客搭建PHPIPAM,不過我沒有選擇1.4,而是直接搭建了1.6版本,一切順利,到了最后建立數據庫階段,輸入數據庫賬號和密碼后提示Cannot install sql SCHEMA f…

大模型部署_書生浦語大模型 _作業2

本節課可以讓同學們實踐 4 個主要內容,分別是: 1、部署 InternLM2-Chat-1.8B 模型進行智能對話 1.1安裝依賴庫: pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

Elasticsearch之文本分析

文本分析基本概念 官網:Text analysis | Elasticsearch Guide [7.17] | Elastic 官網稱為文本分析,這是對文本進行一直分析處理的方式,基本處理邏輯是為按照預先制定的分詞規則,把原本的文檔進行分割成多個小顆粒度的詞項&#x…

Python pands使用引擎實現excel條件格式

截至我的知識更新日期(2023年),Pandas 庫本身并不直接支持Excel條件格式。Pandas 是一個強大的Python數據分析庫,它主要用于數據分析和操作,而不是用于創建或編輯Excel文件的格式。 然而,你可以使用 openp…

如何給出好的“文言一心”指令?

一、文言一心是什么? 在現代技術背景下,“文言一心”還是百度公司創建的一款大語言模型。這款模型基于飛槳深度學習平臺和文心知識增強大模型,并擁有強大的中文語料庫,可以理解和生成富含文化內涵和哲理的文本內容。其核心技術架構…

社區醫院|基于SprinBoot+vue的社區醫院管理服務系統(源碼+數據庫+文檔)

社區醫院管理服務系統 目錄 基于SprinBootvue的社區醫院管理服務系統 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 4醫生功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取…

看花眼,眼花繚亂的主食凍干到底應該怎么選?靠譜的主食凍干分享

隨著科學養貓知識的普及,主食凍干喂養越來越受到養貓人的青睞。主食凍干不僅符合貓咪的飲食天性,還能提供均衡的營養,有助于維護貓咪的口腔和消化系統健康。許多貓主人認識到了主食凍干喂養的諸多益處,計劃嘗試這種喂養方式&#…

學英語材料:單口喜劇、講故事、短劇喜劇以及廣播劇和播客節目

學習英語節目 有名的單口喜劇、講故事、短劇喜劇以及廣播劇和播客節目: 單口喜劇(Stand-up Comedy) 描述:這是最接近相聲的形式,表演者獨自一人站在舞臺上,用幽默的方式講述個人經歷、觀察到的社會現象或…

C++面向對象程序設計 - 標準輸出流

在C中,標準輸出流通常指的是與標準輸出設備(通常是終端或控制臺)相關聯的流對象。這個流對象在C標準庫中被定義為std::cout、std::err、std::clog,它們是std::ostream類的一個實例。 一、cout,cerr和clog流 ostream類…