隨著網路的發展,越來越多的應用程式部署在雲端,如何確保雲端服務的安全性和穩定性成為了關鍵問題。其中,Nginx作為一個高效能的Web伺服器和反向代理,廣泛應用於雲端服務的部署和管理。在實際應用中,有些場景下需要對存取進行限制,例如頻繁存取的IP,惡意存取的請求,大流量的存取等等。本文將介紹一種基於時間視窗的存取控制方法,透過限制在一定時間內的存取次數,確保雲端服務的安全性和穩定性。
一、什麼是時間視窗
時間視窗是指在一定時間內對事件進行限制的方法。在存取控制中,可以根據時間視窗對存取進行限制,例如:1分鐘內最多存取10次,5分鐘內最多可存取100次,1小時最多存取1000次等。時間窗口可以根據實際情況進行調整,具有靈活性和可自訂性。
二、Nginx反向代理程式中的時間視窗存取控制
在使用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
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server{ ... location /{ limit_req zone=one burst=5; proxy_pass http://backend; } }
$ 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
$ 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反向代理程式中基於時間視窗的存取控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!