程式如何控制NGINX不要cache

NGINX有提供以下專用的header,讓後端的程式可以藉由這些HTTP header和NGINX溝通。這些HTTP header都不會傳送到client端。
  1. X-Accel-Expires: set the parameters of response caching;
  2. X-Accel-Redirect: performs an internal redirect to the specified URI;
  3. X-Accel-Limit-Rate: sets the rate limit for transmission of a response to a client;
  4. X-Accel-Buffering: enables or disables buffering of a response;
  5. X-Accel-Charset: sets the desired charset of a response.
導入NGINX後都沒什麼情境去使用這些專用header。最近發現到有個情境可使用到X-Accel-Expires。簡單說明如下…

大禮大同步道-立霧山日出-砂卡礑步道O型

大禮部落-禮拜堂
大禮部落-禮拜堂

年初再度造訪位於花蓮的瓦拉米步道時,在瓦拉米山屋和其他山友聊天時,對方推薦大禮、大同部落非常值得去走走。於是,就將這條路線放在口袋名單中…直到雙十國慶連續假期前拿了出來、準備去大禮大同步道探訪。

交通規劃

這次的行程的交通規劃,依舊選擇大眾交通工具。先搭乘火車到花蓮,再轉搭客運到太魯閣遊客中心。原本是希望能買到到距離太魯閣遊客中心比較近的花蓮新城車站,但…花東線的火車在假日總是一位難求,最後只能買到花蓮車站的車班。

如果您也是準備選擇大眾交通工具前往,可參考文末我們這次的行程表

NGINX如何處理HTTP Vary Header

前一篇文章,提到了如何藉由重新設定NGINX Cache Key,移除不會影響網頁內容的參數。這樣的作法雖然可以提升hit rate,但實務上仍會有所限制,這篇就稍做說明…

首先,我使用瀏覽器瀏覽以下網頁
https://test.com.tw/?para1=123&fbcld=XXXXXXXXXX&para2=456
Nginx Cache Key的組成是否如 前一篇文章所說的呢?這疑問可以觀察NGINX的cache檔案內容得到答案。

以下節錄Cache檔案的部分內容,可見fbcld已經不見
KEY: test.com.tw/?para1=123&para2=456
HTTP/1.1 200 OK
Date: Tue, 14 Jan 2020 07:27:02 GMT
Server: Apache
Cache-Control: max-age=0
Expires: Tue, 14 Jan 2020 07:27:02 GMT
Vary: Accept-Encoding,User-Agent
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

剛提到實務上仍會有所限制,WHY?

NGINX cache key中如何移除網址中不必要的參數

對一個大流量的網站,cache可說是無所不在。由訪客端的browser cache、傳輸過程中的proxy cache,到程式端的nosql等各種cache…對於cache機制,最重要的指標莫過於hit rate。這數字越高,表示該cache機制的效果越佳。

最近在處理一個爬蟲的過程中,注意到一個狀況,當行銷部門買Google廣告、或有網友將網址分享於FB時,Google或Facebook都會在網址後面加上他們自己獨有GET參數。

由於我們有採用nginx作為reverse proxy,主要用以降低後端的web server的loading(還有其他用途),上述的狀況會使得hit rate不好。