我正在尋找一種在 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
都會覆蓋更高級別中的所有其他外觀,因此您將需要複製(或更好include
)access_log
您也想使用的更高級別中的指令。