首頁  >  文章  >  運維  >  Nginx反向代理程式中基於時間視窗的存取控制

Nginx反向代理程式中基於時間視窗的存取控制

PHPz
PHPz原創
2023-06-10 12:01:361147瀏覽

隨著網路的發展,越來越多的應用程式部署在雲端,如何確保雲端服務的安全性和穩定性成為了關鍵問題。其中,Nginx作為一個高效能的Web伺服器和反向代理,廣泛應用於雲端服務的部署和管理。在實際應用中,有些場景下需要對存取進行限制,例如頻繁存取的IP,惡意存取的請求,大流量的存取等等。本文將介紹一種基於時間視窗的存取控制方法,透過限制在一定時間內的存取次數,確保雲端服務的安全性和穩定性。

一、什麼是時間視窗

時間視窗是指在一定時間內對事件進行限制的方法。在存取控制中,可以根據時間視窗對存取進行限制,例如:1分鐘內最多存取10次,5分鐘內最多可存取100次,1小時最多存取1000次等。時間窗口可以根據實際情況進行調整,具有靈活性和可自訂性。

二、Nginx反向代理程式中的時間視窗存取控制

  1. 安裝ngx_http_limit_req_module模組

在使用nginx時間視窗存取控制之前,需要安裝ngx_http_limit_req_module模組。此模組可以控制同一時間段內客戶端請求到達的頻率。通常我們安裝nginx時會同時安裝模組,如果沒有安裝則需要重新編譯安裝nginx,安裝方式如下:

$ wget http://nginx.org/download/nginx-1.14.0.tar.gz

$ tar zxvf nginx-1.14.0.tar.gz

$ cd nginx-1.14.0/

$ ./configure --prefix=/usr/local/nginx --add-module=../nginx-limit-req-module-master

$ make

$ sudo make install
  1. 設定Nginx反向代理
##在Nginx反向代理的設定檔中加入以下內容:

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

server{
    ...
    location /{
        limit_req zone=one burst=5;
        proxy_pass http://backend;
    }
}

此配置中,limit_req_zone定義了限制區域one,其中10m是記憶體大小,可以根據實際需要進行調整。 rate=1r/s定義了每秒鐘處理一個請求。在location中加入了limit_req zone=one burst=5,表示當超過1秒鐘1個請求的數量時,會將多餘的請求以5個請求為峰值在後續時間內處理。

    驗證時間視窗存取控制
設定完成後,可以使用ab工具進行測試,如下:

$ ab -n 100 -c 10 http://localhost/

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Finished 100 requests

此指令意為:傳送100個請求,並發數為10個。測試結果:如果在1秒鐘內發送10個請求,則其餘的請求將會被限制,產生429錯誤,如下:

$ ab -n 100 -c 10 http://localhost/

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Finished 100 requests

Server Software:        nginx/1.14.0
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      10
Time taken for tests:   0.062 seconds
Complete requests:      100
Failed requests:        9
   (Connect: 0, Receive: 0, Length: 0, Exceptions: 9)
Non-2xx responses:      9
Requests per second:    1617.28 [#/sec] (mean)
Time per request:       6.173 [ms] (mean)
Time per request:       0.617 [ms] (mean, across all concurrent requests)
Transfer rate:          0.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.2      1       1
Processing:     1    5   9.8      3      47
Waiting:        1    5   9.8      3      47
Total:          1    6   9.8      4      47

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      5
  75%      5
  80%      6
  90%     15
  95%     47
  98%     47
  99%     47
 100%     47 (longest request)

三、總結

#在雲端服務的部署和管理中,存取控制至關重要。透過Nginx反向代理中基於時間視窗的存取控制,可以有效控制存取頻率,確保雲端服務的安全性和穩定性。此方法不僅可以限制頻率較高的請求,還可以對惡意存取的請求進行限制,有效地提高了雲端服務的可靠性和安全性。

以上是Nginx反向代理程式中基於時間視窗的存取控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn