# [Nginx] 流量限制 ###### tags: `server` `Nginx` 定義一個流量限制 ```Vim! limit_req_zone $binary_remote_addr zone=limit_name:10m rate=10r/s; limit_req_zone $binary_remote_addr zone=定義的名稱:幾MB rate=一秒幾次; limit_req zone=testname1 burst=5 nodelay; ``` location ```Vim! # 判斷ip需不需要限制 geo $limited{ default 1; IP 0; } # 依照limited值判斷 # 為 1 則將 limit 設定為 ip # 為 0 則空值 map $limited $limit { 0 ""; 1 $binary_remote_addr; } limit_req_zone $limit zone=testname1:7m rate=10r/s; limit_req_zone $limit zone=testname2:7m rate=10r/s; ``` ```Vim! location / { limit_req zone=testname1 burst=5 nodelay; } ``` * `$binary_remote_addr` 客戶端 IP * `zone=testname1:7m` 名稱叫 testname1 的 zone ,最多可使用 7MB 的記憶體來儲存各個請求次數 * `rate=10r/s` 處理速度為每秒最多 10 個請求,過量的請求會被拒絕 * `burst=15` 最多允許 15 個請求同時進來 server,並以 rate 的速度處理這 15 個請求 * `delay` / `nodelay` `/api/test1` 路徑 ```Vim! http { limit_req_zone $binary_remote_addr zone=testname1:10m rate=2r/m; limit_req_zone $binary_remote_addr zone=testname2:10m rate=1r/m; server { location /api/test1 { limit_req zone=testname1; proxy_pass http://test.1.com; } location /api/test2 { limit_req zone=testname2; proxy_pass http://test.2.com; } } } ``` --- 參考資料: [Day07-流量限制(二)-burst](https://ithelp.ithome.com.tw/articles/10269559) [Day09-流量限制(四)-delay](https://ithelp.ithome.com.tw/articles/10270993) [NGINX 設定密碼認證與限制可存取的 IP 位址,控制頻寬與連線數](https://blog.gtwang.org/linux/nginx-restricting-access-authenticated-user-ip-address-tutorial/2/)