將 nginx 速率限制的 IP 記錄到特定檔案中

將 nginx 速率限制的 IP 記錄到特定檔案中

我正在尋找一種在 nginx 節點之間同步限速 IP 的方法。我想記錄這些 IP,然後將它們推送到資料庫中並開發一個代理來更新 nginx 設定檔中被封鎖的 IP。

我的挑戰是找到一種方法來使用429狀態代碼限制 nginx 的 IP。

那麼,是否可以將速率限制的 IP 記錄到 nginx 中的特定檔案中,或者您是否建議使用其他方法來在節點之間同步速率限制的 IP?

答案1

是的,你可以這樣做,類似的例子甚至在Nginx 文檔

access_log指令還採用一個可選if=參數,用於評估給定的變量,並且僅在結果不為 0 或空字串時才記錄。再加access_log上一個級別中可以有多個級別,您可以根據需要以不同的方式進行日誌記錄。

不過,首先您需要一個map來映射HTTP 回應狀態你對一個變數感興趣。請記住,map必須在server街區之外。

map $status $rate_limited {
    default 0;
    429     1;
}

然後在相關server區塊中您將聲明您的access_log.

access_log /var/log/nginx/rate_limited.log combined if=$rate_limited;

請記住,某一級別中的任何外觀access_log都會覆蓋更高級別中的所有其他外觀,因此您將需要複製(或更好includeaccess_log您也想使用的更高級別中的指令。

相關內容