<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
為了防止一些搶票助手所發起的一些無用請求,我們可以使用 nginx 中的限流策略進行限流操作。
常見的限流演演算法:計數器、漏桶演演算法、令牌桶演演算法
從作用上來說,漏桶和令牌桶演演算法最明顯的區別就是是否允許突發流量(burst)的處理,漏桶演演算法能夠強行限制資料的實時傳輸(處理)速率,對突發流量不做額外處理;而令牌桶演演算法能夠在限制資料的平均傳輸速率的同時允許某種程度的突發傳輸。
Nginx 的限流主要是兩種方式: 限制存取頻率
和限制並行連線數
。
Nginx 按請求速率限速模組使用的是漏桶演演算法,即能夠強行保證請求的實時處理速度不會超過設定的閾值。
Nginx 官方版本限制 IP 的連線和並行分別有兩個模組:
1、limit_req_zone:用來限制單位時間內的請求數,即速率限制 , 採用的漏桶演演算法 “leaky bucket”。
2、limit_conn_zone:用來限制同一時間連線數,即並行限制。
使用語法:limit_req_zone key zone rate
key :定義限流物件,binary_remote_addr 是一種 key,表示基於 remote_addr(使用者端 IP) 來做限流,binary_ 的目的是壓縮記憶體佔用量。
zone:定義共用記憶體區來儲存存取資訊, myRateLimit:10m 表示一個大小為 10M,名字為 myRateLimit 的記憶體區域。1M 能儲存 16000 IP 地址的
存取資訊,10M 可以儲存 16W IP 地址存取資訊。
rate: 用於設定最大存取速率,rate=10r/s 表示每秒最多處理 10 個請求。Nginx 實際上以毫秒為粒度來跟蹤請求資訊,因此 10r/s 實際上是限制:每 100 毫秒處理一個請求。這意味著,自上一個請求處理完後,若後續 100 毫秒內又有請求到達,將拒絕處理該請求。
舉例:
http { # 定義限流策略 limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s ; # 搜尋服務的虛擬主機 server { location / { # 使用限流策略,burst=5,重點說明一下這個設定,burst 爆發的意思,這個設定的意思是設定一個大小為 5 的緩衝區(佇列)當有大量請求(爆發)過來時, # 超過了存取頻次限制的請求可以先放到這個緩衝區內。nodelay,如果設定,超過存取頻次而且緩衝區也滿了的時候就會直接返回 503,如果沒有設定,則所 # 有請求會等待排隊。 limit_req zone=rateLimit burst=5 nodelay; proxy_pass http://train-manager-search ; } } }
頻繁存取:
使用語法:limit_conn_zone key zone
key :定義限流物件,binary_remote_addr 是一種 key,表示基於 remote_addr(使用者端 IP) 來做限流,binary_ 的目的是壓縮記憶體佔用量。
zone:定義共用記憶體區來儲存存取資訊, myRateLimit:10m 表示一個大小為 10M,名字為 myRateLimit 的記憶體區域。1M 能儲存 16000 IP 地址的
存取資訊,10M 可以儲存 16W IP 地址存取資訊。
舉例:
http { # 定義限流策略 limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; # 搜尋服務的虛擬主機 server { location / { # 對應的 key 是 $binary_remote_addr,表示限制單個 IP 同時最多能持有 1 個連線。 limit_conn perip 1; # 對應的 key 是 $server_name,表示虛擬主機(server) 同時能處理並行連線的總數。注意,只有當 request header 被 後端 server 處理後,這個連線才進行計數。 limit_conn perserver 10 ; proxy_pass http://train-manager-search ; } } }
有時候會有一些惡意IP攻擊伺服器,會基於程式頻繁發起請求對伺服器造成巨大壓力,我們此時可以使用Nginx的黑名單功能實現黑名單過濾操作。我們首先需要設定黑名單IP,黑名單IP我們可以記錄到一個組態檔中,比如設定到blockip.conf
檔案中:
設定固定IP為黑名單:
deny 192.168.100.1;
在nginx.conf
中引入blockip.conf
,可以放到http, server, location語句塊,設定如下:
#黑名單 include blockip.conf;
此時在192.168.100.1
的IP上存取伺服器,會報如下錯誤:
遮蔽ip的組態檔既可以遮蔽單個ip,也可以遮蔽ip段,或者只允許某個ip或者某個ip段存取。
# 遮蔽單個ip存取 deny IP; # 允許單個ip存取 allow IP; # 遮蔽所有ip存取 deny all; # 允許所有ip存取 allow all; #遮蔽整個段即從123.0.0.1到123.255.255.254存取的命令 deny 123.0.0.0/8 #遮蔽IP段即從123.45.0.1到123.45.255.254存取的命令 deny 124.45.0.0/16 #遮蔽IP段即從123.45.6.1到123.45.6.254存取的命令 deny 123.45.6.0/24 1234567891011121314
如果你想實現這樣的應用,除了幾個IP外,其他全部拒絕,那需要你在blockip.conf中這樣寫:
allow 192.168.100.1; allow 192.168.100.2; deny all; 123
但是這種手動設定的方式可能太過繁瑣,我們也可以設定動態黑白名單。
設定動態黑白名單,我們可以採用Lua+Redis實現,將黑名單存入到Redis快取,每次執行請求時,通過lua指令碼先獲取使用者IP,匹配IP是否屬於黑名單,如果是,則不讓請求,如果不是,則放行。
到此這篇關於Nginx限流和黑名單設定的文章就介紹到這了,更多相關nginx限流設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45