Nginx 快取使用指南-簡單

醉魚!發表於2020-09-24

 

## 重點部分

### http 模組增加

```text
    proxy_buffer_size 16k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 96k;
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
    proxy_connect_timeout 10;
    proxy_read_timeout 180;
    proxy_send_timeout 5;
    proxy_temp_file_write_size 96k;
    proxy_temp_path /tmp/temp_dir;
```

### 匹配規則模組增加

* 正則匹配,快取圖片/js型別檔案

  ```text
      location ~ .*\.(gif|jpg|png|css|js)(.*) {
                  proxy_pass http://127.0.0.1:8780;
                  proxy_redirect off;
                  proxy_set_header Host $host;
                  proxy_cache cache_one;
                  proxy_cache_valid 200 302 24h;
                  proxy_cache_valid 301 30d;
                  proxy_cache_valid any 5m;
                  rewrite ~/(.*)$ /$1 break;
                  expires 24h;
                  add_header zuiyu_say  "hey! Guys! Give me one to see";
      }
  ```

  

* 對url匹配

  ```text
  
      location /api/loadFileStream {
                  proxy_pass http://127.0.0.1:8780;
                  proxy_redirect off;
                  proxy_set_header Host $host;
                  proxy_cache cache_one;
                  proxy_cache_key $uri;
                  proxy_cache_valid 200 302 24h;
                  proxy_cache_valid 301 30d;
                  proxy_cache_valid any 5m;
                  expires 24h;
                  add_header zuiyu_say  "hey! Guys! Give me one to see";
      }
  ```

  

到此,快取即配置完成,就可以測試 一下了

## 配置項解讀

### http 模組

* proxy_buffer_size 緩衝區大小
* proxy_buffers 每個連線設定緩衝區的數量為number,每塊緩衝區的大小為size
* proxy_busy_buffers_size 開啟緩衝響應 的功能以後,在沒有讀到全部響應的情況下,寫緩衝到達一定大小時,nginx一定會向客戶端傳送響應,直到緩衝小於此值
* proxy_cache_path 設定快取的路徑和其他引數。被快取的資料如果有inactive引數,當前引數是1天,指定的時間未被訪問,就會從快取中移除 
* proxy_connect_timeout 伺服器連線超時時間
* proxy_read_timeout 連線成功後,等待後端伺服器響應時間
* proxy_send_timeout 後端伺服器資料回傳時間
* proxy_temp_file_write_size 設定nginx每次寫資料到臨時檔案的size大小限制
* proxy_temp_path 從後端伺服器接受的臨時檔案存放路徑
### 匹配規則模組

* proxy_pass nginx快取拿不到資源向該地址轉發請求,拿到獲取的資源並進行快取
* proxy_redirect 設定後端伺服器Location響應頭和Refresh響應頭的替換文字
* proxy_set_header 允許重新定義發往後端伺服器的請求頭
* proxy_cache 指定用於頁面快取的共享記憶體,對應http層設定keys_zone
* proxy_cache_key 快取的key 預設"$host$request_uri $cookie_user"; 可以使用下面nginx配置引數獲取指定引數hash一個自定義的key
* proxy_cache_valid 對不同響應的狀態碼設定不同的快取時間
* expires 快取時間
* add_header 對伺服器返回的響應頭內容新增自定義返回資料,格式為 add_header key value

## Nginx 配置獲取引數詳解

```text
nginx 各引數翻譯,作用

$arg_PARAMETER #這個變數包含GET請求中,如果有變數PARAMETER時的值。

$args #這個變數等於請求行中(GET請求)的引數,例如foo=123&bar=blahblah;

$binary_remote_addr #二進位制的客戶地址。

$body_bytes_sent #響應時送出的body位元組數數量。即使連線中斷,這個資料也是精確的。

$content_length #請求頭中的Content-length欄位。

$content_type #請求頭中的Content-Type欄位。

$cookie_COOKIE #cookie COOKIE變數的值

$document_root #當前請求在root指令中指定的值。

$document_uri #與$uri相同。

$host #請求主機頭欄位,否則為伺服器名稱。

$hostname #Set to the machine’s hostname as returned by gethostname

$http_HEADER

$is_args #如果有$args引數,這個變數等於”?”,否則等於”",空值。

$http_user_agent #客戶端agent資訊

$http_cookie #客戶端cookie資訊

$limit_rate #這個變數可以限制連線速率。

$query_string #與$args相同。

$request_body_file #客戶端請求主體資訊的臨時檔名。

$request_method #客戶端請求的動作,通常為GET或POST。

$remote_addr #客戶端的IP地址。

$remote_port #客戶端的埠。

$remote_user #已經經過Auth Basic Module驗證的使用者名稱。

$request_completion #如果請求結束,設定為OK. 當請求未結束或如果該請求不是請求鏈串的最後一個時,為空(Empty)。

$request_method #GET或POST

$request_filename #當前請求的檔案路徑,由root或alias指令與URI請求生成。

$request_uri #包含請求引數的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。不能修改。

$scheme #HTTP方法(如http,https)。

$server_protocol #請求使用的協議,通常是HTTP/1.0或HTTP/1.1。

$server_addr #伺服器地址,在完成一次系統呼叫後可以確定這個值。

$server_name #伺服器名稱。

$server_port #請求到達伺服器的埠號。

$uri #不帶請求引數的當前URI,$uri不包含主機名,如”/foo/bar.html”。該值有可能和$request_uri 不一致。$request_uri是瀏覽器發過來的值。該值是rewrite後的值。例如做了internal redirects後。
```

 

參考連結 https://blog.csdn.net/z69183787/article/details/78033336

微信公眾號 醉魚Java 一起來學習交流

醉魚Java

 

相關文章