NGINX 的一些記錄
阿新 • • 發佈:2018-11-05
nginx :
啟動/停止/重啟/重新載入:
sudo /etc/init.d/nginx start/stop/restart/reload (如果是原始碼安裝 就是bin 下面的nginx檔案)
nginx 速率限制:
- limit_rate_after 10m;
- limit_rate 20k;
表示在響應超過10M的時候,速率限制為20k
nginx 併發連線配置:
- limit_conn_zone $binary_remote_addr zone=one:10m; # 定義 資料區,來記錄會話狀態資訊 ,後面有區塊名,變數 和大小
-
limie_conn one 10;
第一個個是在http 塊 裡面 後面的是可以在server location http 塊裡面,這裡表示 一個會話最多10 個連線,可以記錄大約32w個會話訊息,數量是根據
會話資訊的長度為 32 或 64 bytes。 而 $binary_remote_addr 的長度為 4 bytes,會話資訊的長度為 32 bytes。 當 zone 的大小為 1M 的時候,大約可以記錄 32000 個會話資訊 ==> 1024 * 1000 / 32 = 32000
nginx 簡單訪問控制:
- allow address | CIDR | unix: | all
- deny address | CIDR | unix: | all
可以在 http server location limit_except 塊中使用, 表示 允許訪問的 和 拒絕訪問的。
例如:
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; }
nginx 限制每秒的請求數:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
...
server {
...
location ~ \.php$ {
limit_req zone=one burst=5 nodelay;
}
}
}
- $binary_remote_addr 二進位制遠端地址
- zone=one:10m 定義zone名字叫one,併為這個zone分配10M記憶體,用來儲存會話(二進位制遠端地址)
- rate=10r/s; 限制頻率為每秒10個請求
- burst=5 允許超過頻率限制的請求數不多於5個,假設1、2、3、4秒請求為每秒9個,那麼第5秒內請求15個是允許的,反之,如果第一秒內請求15個,會將5個請求放到第二秒,第二秒內超過10的請求直接503,類似多秒內平均速率限制。
- nodelay 超過的請求不被延遲處理,設定後15個請求在1秒內處理。
設定白名單:
geo $whiteiplist {
default 1;
10.11.15.161 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit zone=one:10m rate=10r/s;
limit_conn_zone $limit zone=addr:10m;
geo 模組定義了一個預設值是 1 的變數 whiteiplist,當在 ip 在白名單中,變數 whiteiplist 的值為 0,反之為 1
如果在白名單中--> whiteiplist=0 --> $limit="" --> 不會儲存到 10m 的會話狀態(one 或者 addr)中 --> 不受限制;
反之,不在白名單中 --> whiteiplist=1 --> $limit=二進位制遠端地址 -->儲存進 10m 的會話狀態中 --> 受到限制。
一般的配置,設定代理等等,後面更新。