云计算学习之路——Nginx流量控制
Nginx流量控制
文章目錄
- Nginx流量控制
- 一、流量控制概念
- 二、Nginx流量限制實(shí)戰(zhàn)
- 1、普通的nginx流量限制
- 2、基于代理的nginx流量限制
- 三、Nginx流量限制實(shí)戰(zhàn)(基于代理的白名單的流量限制)
一、流量控制概念
?流量控制:是Nginx中一個(gè)很實(shí)用的功能,我們可以用來限制用戶在給定時(shí)間內(nèi)http請求數(shù)量,可用作安全目的,比如減慢暴力破解速率,主要是為了保護(hù)上游服務(wù)器不被同時(shí)太多用戶請求壓垮。
?nginx如何限流:Nginx的流量限制使用漏桶算法,該算法在通訊和分組交換計(jì)算機(jī)網(wǎng)絡(luò)中廣泛使用,用以處理帶寬有限時(shí)的突發(fā)情況。就好比,向一個(gè)桶底漏水的水桶里倒水一樣。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水將會(huì)溢出;同樣,在請求處理方面,水代表來自客戶端的請求,水桶代表根據(jù)”先進(jìn)先出調(diào)度算法”(FIFO)等待被處理的請求隊(duì)列,桶底漏出的水代表離開緩沖區(qū)被服務(wù)器處理的請求,桶口溢出的水代表被丟棄和不被處理的請求。
流量限制通過ngx_http_limit_req_module模塊實(shí)現(xiàn)
兩個(gè)主要指令是 limit_req_zone和limit_req
limit_req_zone 定義流量限制相關(guān)的參數(shù),通常在http塊中定義,使其可以在多個(gè)上下文中使用。
limit_req 啟用流量限制
limit_req_zone需要以下三個(gè)參數(shù):
Key——定義應(yīng)用限制的請求特征,$binary_remote_addr,以二進(jìn)制的形式保存客戶端IP地址。
Zone——定義用于存儲(chǔ)每個(gè)IP地址狀態(tài)以及被限制請求URL訪問頻率的共享內(nèi)存區(qū)域。定義分為兩個(gè)部分:通過zone=keyword標(biāo)識(shí)區(qū)域的名字,以及冒號后面跟區(qū)域大小。
Rate——定義最大請求速率。
示例:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
這定義了流量限制,意思是定義了一個(gè)名字為mylimit大小為10M的區(qū)域,每個(gè)IP地址被限制為每秒只能請求10次,更準(zhǔn)確地說,在前一個(gè)請求的100毫秒內(nèi)不能請求該URL,$binary_remote_addr,以二進(jìn)制的形式保存客戶端IP地址。
二、Nginx流量限制實(shí)戰(zhàn)
1、普通的nginx流量限制
環(huán)境:
兩臺(tái)虛擬機(jī):
虛擬機(jī)1:服務(wù)端,安裝nginx,完成流量限制配置。
虛擬機(jī)2:充當(dāng)客戶端,訪問服務(wù)端,驗(yàn)證流量限制。
操作:
虛擬機(jī)1
1)安裝并啟動(dòng)nginx
2)修改主配置文件nginx.conf,在http塊中添加流量限制功能
[root@localhost ~]# vim /etc/nginx/nginx.conf
每個(gè)IP地址被限制為每秒只能請求1次,若一秒內(nèi)請求多次將進(jìn)行流量限制。
3)編寫子配置文件limit.conf
[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf
4)重新加載nginx的配置文件
[root@localhost ~]# nginx -s reload
5)創(chuàng)建默認(rèn)發(fā)布目錄以及網(wǎng)頁內(nèi)容,需與配置相對應(yīng)
[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html
虛擬機(jī)2
快速多次訪問虛擬機(jī)1,驗(yàn)證流量限制
當(dāng)快速訪問服務(wù)器時(shí),第一次正常,后面的訪問速率超出了速率1r/sd的設(shè)置,顯示503,說明流量限制配置成功
2、基于代理的nginx流量限制
環(huán)境:
三臺(tái)虛擬機(jī):
虛擬機(jī)1:服務(wù)端,安裝nginx,充當(dāng)真正的web服務(wù)。
虛擬機(jī)2:代理服務(wù)器,安裝nginx,配置代理功能和流量限制功能。
虛擬機(jī)3:充當(dāng)客戶端,訪問代理服務(wù)器,驗(yàn)證流量限制。
操作:
虛擬機(jī)1
1)安裝并啟動(dòng)nginx
2)主配置文件內(nèi)容,默認(rèn)的就好
3)編寫子配置文件limit.conf
[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf
4)重新加載nginx的配置文件
[root@localhost ~]# nginx -s reload
5)創(chuàng)建默認(rèn)發(fā)布目錄以及網(wǎng)頁內(nèi)容,需與配置相對應(yīng)
[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html
虛擬機(jī)2
1)安裝并啟動(dòng)nginx
2)修改主配置文件nginx.conf
[root@localhost ~]# vim /etc/nginx/nginx.conf
3)編寫子配置文件
[root@localhost ~]# vim /etc/nginx/conf.d/proxy.conf
4)重新加載nginx的配置文件
[root@localhost ~]# nginx -s reload
虛擬機(jī)3
快速多次訪問虛擬機(jī)2,驗(yàn)證基于代理的流量限制
當(dāng)快速訪問代理服務(wù)器時(shí),第一次正常,后面的訪問速率超出了速率1r/sd的設(shè)置,顯示503,說明基于代理的流量限制配置成功
三、Nginx流量限制實(shí)戰(zhàn)(基于代理的白名單的流量限制)
?通過將基本的“流量限制”與Nginx的白名單功能配合使用,從而可以實(shí)現(xiàn)更細(xì)粒度的流量限制。
?通過使用白名單功能,對任何不在白名單內(nèi)的ip請求強(qiáng)制執(zhí)行流量限制。
環(huán)境:
四臺(tái)虛擬機(jī):
虛擬機(jī)1:服務(wù)器端。安裝nginx充當(dāng)真正的web服務(wù)。
虛擬機(jī)2:代理服務(wù)器。安裝nginx,配置代理功能,流量限制功能和白名單功能。
虛擬機(jī)3:充當(dāng)白名單里允許的客戶端,訪問代理服務(wù)器,驗(yàn)證白名單流量限制。
虛擬機(jī)3:充當(dāng)白名單以外的客戶端,訪問代理服務(wù)器,驗(yàn)證白名單流量限制。
虛擬機(jī)1
與上文的基于代理的流量限制一樣,這里不再贅述。
虛擬機(jī)2
與上文的基于代理的流量限制一樣,只需修改主配合文件nginx.conf
這個(gè)例子同時(shí)使用了geo和map指令。geo塊將給在白名單中的IP地址對應(yīng)的 $ limit變量分配一個(gè)值0,給其它不在白名單中的分配一個(gè)值1。然后我們使用一個(gè)map映射將這些值轉(zhuǎn)為key,如下:
如果$ limit變量的值是0,$ limit_key變量將被賦值為空字符串
如果$ limit變量的值是1,$ limit_key變量將被賦值為客戶端二進(jìn)制形式的IP地址
兩個(gè)指令配合使用,白名單內(nèi)IP地址的$limit_key變量被賦值為空字符串,不在白名單內(nèi)的被賦值為客戶端的IP地址。當(dāng)limit_req_zone后的第一個(gè)參數(shù)是空字符串時(shí),不會(huì)啟用“流量限制”功能,所以虛擬機(jī)3:192.168.58.155不會(huì)被限制。其它所有IP地址都會(huì)被限制到每秒只能有1個(gè)請求。
重新加載nginx的配置文件
[root@localhost ~]# nginx -s reload
虛擬機(jī)3
快速多次訪問代理服務(wù)器虛擬機(jī)2,驗(yàn)證基于白名單的流量限制
虛擬機(jī)4
快速多次訪問代理服務(wù)器虛擬機(jī)2,驗(yàn)證基于白名單的流量限制
總結(jié)
以上是生活随笔為你收集整理的云计算学习之路——Nginx流量控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日本人让人感到尊重
- 下一篇: Nginx反向代理,上游是https 4