在 Nginx 中,limit_req 和 limit_conn 是兩個用于限制客戶端請求的指令,它們分別用于限制請求速率和并發連接數。
limit_req
limit_req 用于限制請求速率,防止客戶端發送過多請求影響服務器性能。它通過 limit_req_zone 指令定義一個共享內存區域,用于存儲請求的狀態信息,然后在 location 塊中使用 limit_req 指令來限制請求速率。
limit_req_zone:定義一個共享內存區域,用于存儲請求的狀態信息。
http {limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
}
$binary_remote_addr:使用客戶端的 IP 地址作為鍵。
zone=req_zone:10m:定義一個名為 req_zone 的共享內存區域,大小為 10MB。
rate=1r/s:設置速率限制為每秒 1 個請求。
limit_req:在 location 塊中應用請求速率限制
server {location / {limit_req zone=req_zone burst=5 nodelay;}
}
zone=req_zone:指定使用之前定義的共享內存區域 req_zone。
burst=5:允許最多 5 個突發請求。
nodelay:不延遲處理突發請求。
limit_conn
limit_conn 用于限制并發連接數,防止客戶端占用過多服務器資源。它通過 limit_conn_zone 指令定義一個共享內存區域,然后在 location 塊中使用 limit_conn 指令來限制并發連接數。
limit_conn_zone:定義一個共享內存區域,用于存儲連接的狀態信息。
http {limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}
$binary_remote_addr:使用客戶端的 IP 地址作為鍵。
zone=conn_zone:10m:定義一個名為 conn_zone 的共享內存區域,大小為 10MB。
limit_conn:在 location 塊中應用并發連接數限制。
server {location / {limit_conn conn_zone 5;}
}
總結
limit_req:用于限制請求速率,防止過多請求影響服務器性能。
limit_conn:用于限制并發連接數,防止客戶端占用過多服務器資源。