1. 程式人生 > >NGINX 的一些記錄

NGINX 的一些記錄

nginx :

啟動/停止/重啟/重新載入:

sudo /etc/init.d/nginx  start/stop/restart/reload  (如果是原始碼安裝 就是bin 下面的nginx檔案)

 

nginx 速率限制:

  1. limit_rate_after  10m;
  2. limit_rate 20k;

表示在響應超過10M的時候,速率限制為20k

nginx 併發連線配置:

  1. limit_conn_zone  $binary_remote_addr  zone=one:10m;  # 定義 資料區,來記錄會話狀態資訊 ,後面有區塊名,變數 和大小
  2.  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 簡單訪問控制:

 

  1. allow address | CIDR | unix: | all
  2. 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;  
               }
           }
     }
  1. $binary_remote_addr 二進位制遠端地址
  2. zone=one:10m 定義zone名字叫one,併為這個zone分配10M記憶體,用來儲存會話(二進位制遠端地址)
  3. rate=10r/s; 限制頻率為每秒10個請求
  4. burst=5 允許超過頻率限制的請求數不多於5個,假設1、2、3、4秒請求為每秒9個,那麼第5秒內請求15個是允許的,反之,如果第一秒內請求15個,會將5個請求放到第二秒,第二秒內超過10的請求直接503,類似多秒內平均速率限制。
  5. 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 的會話狀態中 --> 受到限制。

 

一般的配置,設定代理等等,後面更新。