人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Nginx限流和黑名單配置的策略

發(fā)布日期:2022-07-20 19:35 | 文章來(lái)源:源碼之家

1 背景介紹

為了防止一些搶票助手所發(fā)起的一些無(wú)用請(qǐng)求,我們可以使用 nginx 中的限流策略進(jìn)行限流操作。
常見(jiàn)的限流算法:計(jì)數(shù)器、漏桶算法、令牌桶算法

Java高并發(fā)系統(tǒng)限流算法的應(yīng)用

從作用上來(lái)說(shuō),漏桶和令牌桶算法最明顯的區(qū)別就是是否允許突發(fā)流量(burst)的處理,漏桶算法能夠強(qiáng)行限制數(shù)據(jù)的實(shí)時(shí)傳輸(處理)速率,對(duì)突發(fā)流量不做額外處理;而令牌桶算法能夠在限制數(shù)據(jù)的平均傳輸速率的同時(shí)允許某種程度的突發(fā)傳輸。

2 Nginx 的限流策略

Nginx 的限流主要是兩種方式: 限制訪問(wèn)頻率限制并發(fā)連接數(shù)。
Nginx 按請(qǐng)求速率限速模塊使用的是漏桶算法,即能夠強(qiáng)行保證請(qǐng)求的實(shí)時(shí)處理速度不會(huì)超過(guò)設(shè)置的閾值。

Nginx 官方版本限制 IP 的連接和并發(fā)分別有兩個(gè)模塊:
1、limit_req_zone:用來(lái)限制單位時(shí)間內(nèi)的請(qǐng)求數(shù),即速率限制 , 采用的漏桶算法 “leaky bucket”。
2、limit_conn_zone:用來(lái)限制同一時(shí)間連接數(shù),即并發(fā)限制。

2.1 limit_req_zone限制訪問(wèn)頻率

使用語(yǔ)法:limit_req_zone key zone rate
key :定義限流對(duì)象,binary_remote_addr 是一種 key,表示基于 remote_addr(客戶端 IP) 來(lái)做限流,binary_ 的目的是壓縮內(nèi)存占用量。
zone:定義共享內(nèi)存區(qū)來(lái)存儲(chǔ)訪問(wèn)信息, myRateLimit:10m 表示一個(gè)大小為 10M,名字為 myRateLimit 的內(nèi)存區(qū)域。1M 能存儲(chǔ) 16000 IP 地址的
訪問(wèn)信息,10M 可以存儲(chǔ) 16W IP 地址訪問(wèn)信息。
rate: 用于設(shè)置最大訪問(wèn)速率,rate=10r/s 表示每秒最多處理 10 個(gè)請(qǐng)求。Nginx 實(shí)際上以毫秒為粒度來(lái)跟蹤請(qǐng)求信息,因此 10r/s 實(shí)際上是限制:每 100 毫秒處理一個(gè)請(qǐng)求。這意味著,自上一個(gè)請(qǐng)求處理完后,若后續(xù) 100 毫秒內(nèi)又有請(qǐng)求到達(dá),將拒絕處理該請(qǐng)求。

舉例:

http {
# 定義限流策略
limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s ;
# 搜索服務(wù)的虛擬主機(jī)
server {
location / {
# 使用限流策略,burst=5,重點(diǎn)說(shuō)明一下這個(gè)配置,burst 爆發(fā)的意思,這個(gè)配置的意思是設(shè)置一個(gè)大小為 5 的緩沖區(qū)(隊(duì)列)當(dāng)有大量請(qǐng)求(爆發(fā))過(guò)來(lái)時(shí),
# 超過(guò)了訪問(wèn)頻次限制的請(qǐng)求可以先放到這個(gè)緩沖區(qū)內(nèi)。nodelay,如果設(shè)置,超過(guò)訪問(wèn)頻次而且緩沖區(qū)也滿了的時(shí)候就會(huì)直接返回 503,如果沒(méi)有設(shè)置,則所
# 有請(qǐng)求會(huì)等待排隊(duì)。
limit_req zone=rateLimit burst=5 nodelay;
proxy_pass http://train-manager-search ;
   }
  }
}

頻繁訪問(wèn):

2.2 limit_conn_zone限制最大連接數(shù)

使用語(yǔ)法:limit_conn_zone key zone
key :定義限流對(duì)象,binary_remote_addr 是一種 key,表示基于 remote_addr(客戶端 IP) 來(lái)做限流,binary_ 的目的是壓縮內(nèi)存占用量。
zone:定義共享內(nèi)存區(qū)來(lái)存儲(chǔ)訪問(wèn)信息, myRateLimit:10m 表示一個(gè)大小為 10M,名字為 myRateLimit 的內(nèi)存區(qū)域。1M 能存儲(chǔ) 16000 IP 地址的
訪問(wèn)信息,10M 可以存儲(chǔ) 16W IP 地址訪問(wèn)信息。
舉例:

http {
# 定義限流策略
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 搜索服務(wù)的虛擬主機(jī)
server {
location / {
# 對(duì)應(yīng)的 key 是 $binary_remote_addr,表示限制單個(gè) IP 同時(shí)最多能持有 1 個(gè)連接。
limit_conn perip 1;
# 對(duì)應(yīng)的 key 是 $server_name,表示虛擬主機(jī)(server) 同時(shí)能處理并發(fā)連接的總數(shù)。注意,只有當(dāng) request header 被
后端 server 處理后,這個(gè)連接才進(jìn)行計(jì)數(shù)。
limit_conn perserver 10 ;
proxy_pass http://train-manager-search ;
    }
  }
}

3 黑名單設(shè)置

有時(shí)候會(huì)有一些惡意IP攻擊服務(wù)器,會(huì)基于程序頻繁發(fā)起請(qǐng)求對(duì)服務(wù)器造成巨大壓力,我們此時(shí)可以使用Nginx的黑名單功能實(shí)現(xiàn)黑名單過(guò)濾操作。我們首先需要配置黑名單IP,黑名單IP我們可以記錄到一個(gè)配置文件中,比如配置到blockip.conf文件中:

配置固定IP為黑名單:

deny 192.168.100.1;

nginx.conf中引入blockip.conf,可以放到http, server, location語(yǔ)句塊,配置如下:

#黑名單
include blockip.conf;

此時(shí)在192.168.100.1的IP上訪問(wèn)服務(wù)器,會(huì)報(bào)如下錯(cuò)誤:

屏蔽ip的配置文件既可以屏蔽單個(gè)ip,也可以屏蔽ip段,或者只允許某個(gè)ip或者某個(gè)ip段訪問(wèn)。

# 屏蔽單個(gè)ip訪問(wèn)
deny IP;
# 允許單個(gè)ip訪問(wèn)
allow IP;
# 屏蔽所有ip訪問(wèn)
deny all;
# 允許所有ip訪問(wèn)
allow all;
#屏蔽整個(gè)段即從123.0.0.1到123.255.255.254訪問(wèn)的命令
deny 123.0.0.0/8
#屏蔽IP段即從123.45.0.1到123.45.255.254訪問(wèn)的命令
deny 124.45.0.0/16
#屏蔽IP段即從123.45.6.1到123.45.6.254訪問(wèn)的命令
deny 123.45.6.0/24
1234567891011121314

如果你想實(shí)現(xiàn)這樣的應(yīng)用,除了幾個(gè)IP外,其他全部拒絕,那需要你在blockip.conf中這樣寫(xiě):

allow 192.168.100.1;
allow 192.168.100.2;
deny all;
123

但是這種手動(dòng)配置的方式可能太過(guò)繁瑣,我們也可以配置動(dòng)態(tài)黑白名單。

配置動(dòng)態(tài)黑白名單,我們可以采用Lua+Redis實(shí)現(xiàn),將黑名單存入到Redis緩存,每次執(zhí)行請(qǐng)求時(shí),通過(guò)lua腳本先獲取用戶IP,匹配IP是否屬于黑名單,如果是,則不讓請(qǐng)求,如果不是,則放行。

到此這篇關(guān)于Nginx限流和黑名單配置的文章就介紹到這了,更多相關(guān)nginx限流配置內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

海外穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部