最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx服務(wù)器中限制連接數(shù)與限制請(qǐng)求的模塊配置教程

 更新時(shí)間:2016年01月27日 15:38:54   投稿:goldensun  
這篇文章主要介紹了Nginx服務(wù)器中限制連接數(shù)與限制請(qǐng)求的模塊配置教程,分別為limit conn模塊與limit req模塊的相關(guān)用法講解,需要的朋友可以參考下

限制連接數(shù)的ngx_http_limit_conn_module模塊
我們經(jīng)常會(huì)遇到這種情況,服務(wù)器流量異常,負(fù)載過大等等。對(duì)于大流量惡意的攻擊訪問,會(huì)帶來帶寬的浪費(fèi),服務(wù)器壓力,影響業(yè)務(wù),往往考慮對(duì)同一個(gè)ip的連接數(shù),并發(fā)數(shù)進(jìn)行限制。下面說說ngx_http_limit_conn_module 模塊來實(shí)現(xiàn)該需求。該模塊可以根據(jù)定義的鍵來限制每個(gè)鍵值的連接數(shù),如同一個(gè)IP來源的連接數(shù)。并不是所有的連接都會(huì)被該模塊計(jì)數(shù),只有那些正在被處理的請(qǐng)求(這些請(qǐng)求的頭信息已被完全讀入)所在的連接才會(huì)被計(jì)數(shù)。
一. ngx_http_limit_conn_module指令解釋
1. limit_conn_zone
語法:

limit_conn_zone $variable zone=name:size;

默認(rèn)值: none
配置段: http
該指令描述會(huì)話狀態(tài)存儲(chǔ)區(qū)域。鍵的狀態(tài)中保存了當(dāng)前連接數(shù),鍵的值可以是特定變量的任何非空值(空值將不會(huì)被考慮)。$variable定義鍵,zone=name定義區(qū)域名稱,后面的limit_conn指令會(huì)用到的。size定義各個(gè)鍵共享內(nèi)存空間大小。如:

limit_conn_zone $binary_remote_addr zone=addr:10m;

注釋:客戶端的IP地址作為鍵。注意,這里使用的是$binary_remote_addr變量,而不是$remote_addr變量。
$remote_addr變量的長度為7字節(jié)到15字節(jié),而存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié),在64位平臺(tái)中占用64字節(jié)。
$binary_remote_addr變量的長度是固定的4字節(jié),存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié),在64位平臺(tái)中占用64字節(jié)。
1M共享空間可以保存3.2萬個(gè)32位的狀態(tài),1.6萬個(gè)64位的狀態(tài)。
如果共享內(nèi)存空間被耗盡,服務(wù)器將會(huì)對(duì)后續(xù)所有的請(qǐng)求返回 503 (Service Temporarily Unavailable) 錯(cuò)誤。
limit_zone 指令和limit_conn_zone指令同等意思,已經(jīng)被棄用,就不再做說明了。
2. limit_conn_log_level
語法:

limit_conn_log_level info | notice | warn | error

默認(rèn)值:error
配置段:http, server, location
當(dāng)達(dá)到最大限制連接數(shù)后,記錄日志的等級(jí)。
3. limit_conn
語法:

limit_conn zone_name number

默認(rèn)值:none
配置段:http, server, location
指定每個(gè)給定鍵值的最大同時(shí)連接數(shù),當(dāng)超過這個(gè)數(shù)字時(shí)被返回503 (Service Temporarily Unavailable)錯(cuò)誤。如:

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
 location /www.ttlsa.com/ {
  limit_conn addr 1;
 }
}

同一IP同一時(shí)間只允許有一個(gè)連接。
當(dāng)多個(gè) limit_conn 指令被配置時(shí),所有的連接數(shù)限制都會(huì)生效。比如,下面配置不僅會(huì)限制單一IP來源的連接數(shù),同時(shí)也會(huì)限制單一虛擬服務(wù)器的總連接數(shù):

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
 limit_conn perip 10;
 limit_conn perserver 100;
}

limit_conn指令可以從上級(jí)繼承下來。
4. limit_conn_status
語法: limit_conn_status code;
默認(rèn)值: limit_conn_status 503;
配置段: http, server, location
該指定在1.3.15版本引入的。指定當(dāng)超過限制時(shí),返回的狀態(tài)碼。默認(rèn)是503。
5. limit_rate
語法:limit_rate rate
默認(rèn)值:0
配置段:http, server, location, if in location
對(duì)每個(gè)連接的速率限制。參數(shù)rate的單位是字節(jié)/秒,設(shè)置為0將關(guān)閉限速。 按連接限速而不是按IP限制,因此如果某個(gè)客戶端同時(shí)開啟了兩個(gè)連接,那么客戶端的整體速率是這條指令設(shè)置值的2倍。
二. 完整實(shí)例配置

http {
 limit_conn_zone $binary_remote_addr zone=limit:10m;
 limit_conn_log_level info;
 
 server {
 location ^~ /download/ { 
 limit_conn limit 4;
 limit_rate 200k;
 alias /data/www.ttlsa.com/download/;
    }
 }
}

三. 使用注意事項(xiàng)
事務(wù)都具有兩面性的。ngx_http_limit_conn_module 模塊雖說可以解決當(dāng)前面臨的并發(fā)問題,但是會(huì)引入另外一些問題的。如前端如果有做LVS或反代,而我們后端啟用了該模塊功能,那不是非常多503錯(cuò)誤了?這樣的話,可以在前端啟用該模塊,要么就是設(shè)置白名單,白名單設(shè)置參見后續(xù)的文檔,我會(huì)整理一份以供讀者參考。

限制請(qǐng)求數(shù)的ngx_http_limit_req_module模塊
我們說到了ngx_http_limit_conn_module 模塊,來限制連接數(shù)。那么請(qǐng)求數(shù)的限制該怎么做呢?這就需要通過ngx_http_limit_req_module 模塊來實(shí)現(xiàn),該模塊可以通過定義的 鍵值來限制請(qǐng)求處理的頻率。特別的,可以限制來自單個(gè)IP地址的請(qǐng)求處理頻率。 限制的方法如同漏斗,每秒固定處理請(qǐng)求數(shù),推遲過多請(qǐng)求。
一. ngx_http_limit_req_module模塊指令
1. limit_req_zone
語法:

limit_req_zone $variable zone=name:size rate=rate;

默認(rèn)值: none
配置段: http
設(shè)置一塊共享內(nèi)存限制域用來保存鍵值的狀態(tài)參數(shù)。 特別是保存了當(dāng)前超出請(qǐng)求的數(shù)量。 鍵的值就是指定的變量(空值不會(huì)被計(jì)算)。如

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

說明:區(qū)域名稱為one,大小為10m,平均處理的請(qǐng)求頻率不能超過每秒一次。
鍵值是客戶端IP。
使用$binary_remote_addr變量, 可以將每條狀態(tài)記錄的大小減少到64個(gè)字節(jié),這樣1M的內(nèi)存可以保存大約1萬6千個(gè)64字節(jié)的記錄。
如果限制域的存儲(chǔ)空間耗盡了,對(duì)于后續(xù)所有請(qǐng)求,服務(wù)器都會(huì)返回 503 (Service Temporarily Unavailable)錯(cuò)誤。
速度可以設(shè)置為每秒處理請(qǐng)求數(shù)和每分鐘處理請(qǐng)求數(shù),其值必須是整數(shù),所以如果你需要指定每秒處理少于1個(gè)的請(qǐng)求,2秒處理一個(gè)請(qǐng)求,可以使用 “30r/m”。
2. limit_req_log_level
語法:

limit_req_log_level info | notice | warn | error;

默認(rèn)值: limit_req_log_level error;
配置段: http, server, location
設(shè)置你所希望的日志級(jí)別,當(dāng)服務(wù)器因?yàn)轭l率過高拒絕或者延遲處理請(qǐng)求時(shí)可以記下相應(yīng)級(jí)別的日志。 延遲記錄的日志級(jí)別比拒絕的低一個(gè)級(jí)別;比如, 如果設(shè)置“l(fā)imit_req_log_level notice”, 延遲的日志就是info級(jí)別。
limit_req_status
語法:

limit_req_status code;

默認(rèn)值: limit_req_status 503;
配置段: http, server, location
該指令在1.3.15版本引入。設(shè)置拒絕請(qǐng)求的響應(yīng)狀態(tài)碼。
3. limit_req
語法:

 limit_req zone=name [burst=number] [nodelay];

默認(rèn)值: —
配置段: http, server, location
設(shè)置對(duì)應(yīng)的共享內(nèi)存限制域和允許被處理的最大請(qǐng)求數(shù)閾值。 如果請(qǐng)求的頻率超過了限制域配置的值,請(qǐng)求處理會(huì)被延遲,所以所有的請(qǐng)求都是以定義的頻率被處理的。 超過頻率限制的請(qǐng)求會(huì)被延遲,直到被延遲的請(qǐng)求數(shù)超過了定義的閾值,這時(shí),這個(gè)請(qǐng)求會(huì)被終止,并返回503 (Service Temporarily Unavailable) 錯(cuò)誤。這個(gè)閾值的默認(rèn)值為0。如:

limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
server {
 location /www.ttlsa.com/ {
  limit_req zone=ttlsa_com burst=5;
 }
}

限制平均每秒不超過一個(gè)請(qǐng)求,同時(shí)允許超過頻率限制的請(qǐng)求數(shù)不多于5個(gè)。
如果不希望超過的請(qǐng)求被延遲,可以用nodelay參數(shù),如:

limit_req zone=ttlsa_com burst=5 nodelay;

二.完整實(shí)例配置

http {
 limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
 
 server {
 location ^~ /download/ { 
 limit_req zone=ttlsa_com burst=5;
 alias /data/www.ttlsa.com/download/;
  }
 }
}

可能要對(duì)某些IP不做限制,需要使用到白名單。名單設(shè)置參見后續(xù)的文檔,我會(huì)整理一份以供讀者參考。請(qǐng)專注。

相關(guān)文章

  • nginx容器配置文件獨(dú)立的實(shí)現(xiàn)

    nginx容器配置文件獨(dú)立的實(shí)現(xiàn)

    本文主要介紹了nginx容器配置文件獨(dú)立,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Nginx配置ssl支持https全過程(docker版)

    Nginx配置ssl支持https全過程(docker版)

    在Docker環(huán)境中配置Nginx使用SSL涉及準(zhǔn)備SSL證書和密鑰、編寫Nginx配置文件以及使用Docker運(yùn)行Nginx,首先,需獲取SSL證書和密鑰,可以是自簽名或由CA頒發(fā),編寫Nginx配置文件時(shí),確保正確引用證書和密鑰路徑,通過Docker命令或Docker Compose運(yùn)行Nginx容器
    2024-10-10
  • 一句簡單命令重啟nginx

    一句簡單命令重啟nginx

    最近我的多個(gè)VPS經(jīng)常出現(xiàn)502錯(cuò)誤,經(jīng)常需要重啟nginx,但網(wǎng)上的很多教程都需要繁瑣的啟動(dòng)腳本,遠(yuǎn)不如apache的重啟命令那么簡單。
    2010-03-03
  • nginx服務(wù)器實(shí)現(xiàn)上傳下載文件的實(shí)例代碼

    nginx服務(wù)器實(shí)現(xiàn)上傳下載文件的實(shí)例代碼

    這篇文章主要介紹了nginx服務(wù)器實(shí)現(xiàn)上傳下載文件的實(shí)例代碼,本文通過代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • 使Nginx服務(wù)器支持.htaccess的方法

    使Nginx服務(wù)器支持.htaccess的方法

    這篇文章主要介紹了使Nginx服務(wù)器支持.htaccess的方法,.htaccess配置文件設(shè)置是Apache上的好東西,現(xiàn)在我們讓Nginx服務(wù)器也能使用它,需要的朋友可以參考下
    2015-07-07
  • windows下快速安裝nginx并配置開機(jī)自啟動(dòng)的方法

    windows下快速安裝nginx并配置開機(jī)自啟動(dòng)的方法

    這篇文章主要介紹了windows下快速安裝nginx 并配置開機(jī)自啟動(dòng)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 詳解nginx實(shí)現(xiàn)https網(wǎng)站設(shè)置

    詳解nginx實(shí)現(xiàn)https網(wǎng)站設(shè)置

    這篇文章主要介紹了詳解nginx實(shí)現(xiàn)https網(wǎng)站設(shè)置,詳細(xì)的介紹了HTTPS簡介和證書生成等,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Nginx代理后HTTP頭部丟失問題的解決方案

    Nginx代理后HTTP頭部丟失問題的解決方案

    在日常開發(fā)和運(yùn)維中,我們經(jīng)常會(huì)使用 Nginx 作為反向代理服務(wù)器,將客戶端的請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù),然而,在某些情況下,通過 Nginx 代理后,后端服務(wù)可能會(huì)丟失部分 HTTP 頭部信息,所以本文給大家介紹了Nginx代理后HTTP頭部丟失問題的解決方案,需要的朋友可以參考下
    2025-02-02
  • nginx配置wss協(xié)議的實(shí)現(xiàn)

    nginx配置wss協(xié)議的實(shí)現(xiàn)

    本文主要介紹了nginx配置wss協(xié)議的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 聊聊Django+uwsgi+nginx服務(wù)器部署問題

    聊聊Django+uwsgi+nginx服務(wù)器部署問題

    這篇文章主要介紹了Django+uwsgi+nginx服務(wù)器部署的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

温泉县| 永城市| 闸北区| 册亨县| 上饶市| 邳州市| 紫阳县| 鄄城县| 乐都县| 东乌| 平阴县| 尚志市| 黄龙县| 宝兴县| 西乡县| 日土县| 海淀区| 巢湖市| 汝南县| 齐河县| 黑山县| 金门县| 无锡市| 时尚| 延长县| 威信县| 泾阳县| 横峰县| 张家口市| 娄烦县| 临潭县| 黄石市| 武宁县| 西青区| 那坡县| 安泽县| 大冶市| 定日县| 集贤县| 湘乡市| 浪卡子县|