Nginx
嘗試限制每個 URI 中的 Nginx 請求
我發現自己需要限制特定 IP 可以針對特定 URI(例如
www.foo.com/somewhere/special
)發送的請求數量,同時讓站點的其餘部分不受監管。我將如何使用
HttpLimitReqModule
內置的 Nginx 配置它?
這是在我的一個網站上完成的方法。首先,我們使用
geo
模組定義一個變數,用於辨識有限地址:geo $slow { default 0; include /etc/nginx/conf.d/slowlist; }
慢列表文件是這樣的:
192.168.0.0/24 1; 192.168.10.0/24 1;
等等(當然,IP 地址只是範例)。然後我們定義速度限制:
limit_req_zone $binary_remote_addr zone=fast:1m rate=1000r/s; limit_req_zone $binary_remote_addr zone=slow:10m rate=20r/m;
現在我們必須將 req_zones 分配給每個 IP 地址。在必要的位置,我們檢查變數 $slow,如果等於 1,我們重定向到位置 @slow(使用虛構錯誤 555):
recursive_error_pages on; error_page 555 = @slow; if ($slow = 1) { return 555; } limit_req zone=fast burst=10000 nodelay;
然後是正正常則,包括 root、index、fastcgi* 等等。此處將使用“快速”限制區域。最後,我們定義位置@slow,其中將使用限制區域’slow’:
location @slow { limit_req zone=slow burst=5 nodelay;
然後是正正常則,包括 root、index、fastcgi* 等等。
因此,通常的請求在正常位置處理,但所有其他請求都被重定向到@slow 位置。