coav4u 發表於 2016-3-30 23:00:43

nginx限制某個IP同一時間的連線數及頻寬

對於負載量比較高的伺服器,可以設定每一位使用者可使用的資源上限,例如同時間最大連線數、連線頻率(每秒或每分鐘連線次數)以及下載速度。

同時間最大連線數若要限制同時間最大連線數,首先要使用 limit_conn_zone 定義一個 key 與 zone 參數:limit_conn_zone $binary_remote_addr zone=addr:10m;說明:
定義一個名為 addr 的 zone,空間大小是 10MB,worker 行程會使用這個 zone 所配置的共享記憶體空間來儲存 key 的計數值。我們使用 $binary_remote_addr 來作為判斷來源 IP 的依據(key),會使用這個二進位的變數來作為 key 是因為它跟一般的字串比起來,會比較省空間,如果 zone 所配置的共享記憶體空間用完了,那伺服器就會回傳 503(Service Temporarily Unavailable)的錯誤訊息。


接著使用 limit_conn 指定一個 IP 同時間可以允許的最大連線數:
location /download/ {
limit_conn addr 5;
}

或是在 server 段針對Domain而不針對上例的目錄來限制連線
.
.
.
server {
.
.
limit_conn addr 5;
.
.
}

連線頻率(每個IP單位時間的連線數)


若要限制連線頻率,首先也是一樣要用 limit_req_zone 定義 key 與 zone 參數:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
除了定義 zone 的名稱與大小之外,還加上了一個 rate 指定連線頻率的上限,單位可以使用每秒的連線次數(r/s)或是每分鐘的連線次數(r/m),r是request,例如若要指定每分鐘不可超過 30 次連線,則設定為 30r/m。


然後在需要限制連線頻率的地方加上 limit_req 的設定:
location /download/ {
limit_req zone=one burst=5;
}
或是在 server 段針對Domain而不針對上例的目錄來限制頻率。
.
.
.
server {
.
.
<span style="font-family: Tahoma;">limit_req zone=one burst=5;</span>
.
.
}

結論:

對於以上的設定可以有效防止駭客攻擊以及那些有心之徒試圖消耗你無畏的頻寬。

其他請參閱 :
https://blog.gtwang.org/linux/ng ... address-tutorial/2/
http://www.nginx.cn/446.html

頁: [1]
查看完整版本: nginx限制某個IP同一時間的連線數及頻寬