日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

云计算学习之路——Nginx流量控制

發布時間:2023/12/20 Nginx 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 云计算学习之路——Nginx流量控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nginx流量控制

文章目錄

    • Nginx流量控制
      • 一、流量控制概念
      • 二、Nginx流量限制實戰
        • 1、普通的nginx流量限制
        • 2、基于代理的nginx流量限制
      • 三、Nginx流量限制實戰(基于代理的白名單的流量限制)

一、流量控制概念

?流量控制:是Nginx中一個很實用的功能,我們可以用來限制用戶在給定時間內http請求數量,可用作安全目的,比如減慢暴力破解速率,主要是為了保護上游服務器不被同時太多用戶請求壓垮。

?nginx如何限流:Nginx的流量限制使用漏桶算法,該算法在通訊和分組交換計算機網絡中廣泛使用,用以處理帶寬有限時的突發情況。就好比,向一個桶底漏水的水桶里倒水一樣。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水將會溢出;同樣,在請求處理方面,水代表來自客戶端的請求,水桶代表根據”先進先出調度算法”(FIFO)等待被處理的請求隊列,桶底漏出的水代表離開緩沖區被服務器處理的請求,桶口溢出的水代表被丟棄和不被處理的請求。

流量限制通過ngx_http_limit_req_module模塊實現
兩個主要指令是 limit_req_zonelimit_req
limit_req_zone 定義流量限制相關的參數,通常在http塊中定義,使其可以在多個上下文中使用。
limit_req 啟用流量限制
limit_req_zone需要以下三個參數:
Key——定義應用限制的請求特征,$binary_remote_addr,以二進制的形式保存客戶端IP地址。
Zone——定義用于存儲每個IP地址狀態以及被限制請求URL訪問頻率的共享內存區域。定義分為兩個部分:通過zone=keyword標識區域的名字,以及冒號后面跟區域大小。
Rate——定義最大請求速率。

示例:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
這定義了流量限制,意思是定義了一個名字為mylimit大小為10M的區域,每個IP地址被限制為每秒只能請求10次,更準確地說,在前一個請求的100毫秒內不能請求該URL,$binary_remote_addr,以二進制的形式保存客戶端IP地址。

二、Nginx流量限制實戰

1、普通的nginx流量限制

環境:
兩臺虛擬機:
虛擬機1:服務端,安裝nginx,完成流量限制配置。
虛擬機2:充當客戶端,訪問服務端,驗證流量限制。

操作:

虛擬機1
1)安裝并啟動nginx
2)修改主配置文件nginx.conf,在http塊中添加流量限制功能

[root@localhost ~]# vim /etc/nginx/nginx.conf

每個IP地址被限制為每秒只能請求1次,若一秒內請求多次將進行流量限制。

3)編寫子配置文件limit.conf

[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf

4)重新加載nginx的配置文件

[root@localhost ~]# nginx -s reload

5)創建默認發布目錄以及網頁內容,需與配置相對應

[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html

虛擬機2
快速多次訪問虛擬機1,驗證流量限制


當快速訪問服務器時,第一次正常,后面的訪問速率超出了速率1r/sd的設置,顯示503,說明流量限制配置成功

2、基于代理的nginx流量限制

環境:
三臺虛擬機:
虛擬機1:服務端,安裝nginx,充當真正的web服務。
虛擬機2:代理服務器,安裝nginx,配置代理功能和流量限制功能。
虛擬機3:充當客戶端,訪問代理服務器,驗證流量限制。

操作:

虛擬機1
1)安裝并啟動nginx
2)主配置文件內容,默認的就好

3)編寫子配置文件limit.conf

[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf

4)重新加載nginx的配置文件

[root@localhost ~]# nginx -s reload

5)創建默認發布目錄以及網頁內容,需與配置相對應

[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html

虛擬機2
1)安裝并啟動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

虛擬機3
快速多次訪問虛擬機2,驗證基于代理的流量限制

當快速訪問代理服務器時,第一次正常,后面的訪問速率超出了速率1r/sd的設置,顯示503,說明基于代理的流量限制配置成功

三、Nginx流量限制實戰(基于代理的白名單的流量限制)

?通過將基本的“流量限制”與Nginx的白名單功能配合使用,從而可以實現更細粒度的流量限制。
?通過使用白名單功能,對任何不在白名單內的ip請求強制執行流量限制。

環境:
四臺虛擬機:
虛擬機1:服務器端。安裝nginx充當真正的web服務。
虛擬機2:代理服務器。安裝nginx,配置代理功能,流量限制功能和白名單功能。
虛擬機3:充當白名單里允許的客戶端,訪問代理服務器,驗證白名單流量限制。
虛擬機3:充當白名單以外的客戶端,訪問代理服務器,驗證白名單流量限制。

虛擬機1
與上文的基于代理的流量限制一樣,這里不再贅述。

虛擬機2

與上文的基于代理的流量限制一樣,只需修改主配合文件nginx.conf


這個例子同時使用了geo和map指令。geo塊將給在白名單中的IP地址對應的 $ limit變量分配一個值0,給其它不在白名單中的分配一個值1。然后我們使用一個map映射將這些值轉為key,如下:
如果$ limit變量的值是0,$ limit_key變量將被賦值為空字符串
如果$ limit變量的值是1,$ limit_key變量將被賦值為客戶端二進制形式的IP地址
兩個指令配合使用,白名單內IP地址的$limit_key變量被賦值為空字符串,不在白名單內的被賦值為客戶端的IP地址。當limit_req_zone后的第一個參數是空字符串時,不會啟用“流量限制”功能,所以虛擬機3:192.168.58.155不會被限制。其它所有IP地址都會被限制到每秒只能有1個請求。

重新加載nginx的配置文件

[root@localhost ~]# nginx -s reload

虛擬機3
快速多次訪問代理服務器虛擬機2,驗證基于白名單的流量限制

虛擬機4
快速多次訪問代理服務器虛擬機2,驗證基于白名單的流量限制

總結

以上是生活随笔為你收集整理的云计算学习之路——Nginx流量控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。