在 squid 裡面最重要也是最難懂得設定大概就是 refresh_pattern 了
其語法如下refresh_pattern [-i] regex min percent max [options]
regex 表示要 cache 住的對象 是比對 uri
-i 表示不分大小寫
而 min, percent, max 則是調整 cache object 要待在 squid 裡的時間參數以 分 當單位
而最重要的莫過於後面的 option 了 因為我們的 squid 是當 reverse proxy 所以可以加上一堆 違反 http 規則的選項原本公司的 squid 有兩台的 in-bound 還是很高 表示還是一直往後端要圖 看了 log 之後發現…
5820428 TCP_REFRESH_HIT/304
4468379 TCP_MISS/200
4390710 TCP_MISS/404
3865158 TCP_REFRESH_HIT/200
2184838 TCP_REFRESH_MISS/404
... 以下略
這 TCP_REFRESH_HIT 也高的太可怕了
查了 squid 的說明
TCP_REFRESH_HIT 是表示 client 端的 header 有 Programa: no-cache
所以 squid 遵循 http 規範只好往後端的 original server 再要一次圖
比較原圖跟 cache 後發現一樣 所以送 304 Not Modified
但是這樣一來還是會往後端要
所以解決的方法就是加上違反 http 協定的 options 忽略 client no-cache 的要求不管怎樣還是從 cache 出
由於我們是 reverse proxy 所以是無傷大雅的
所以加上 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private ignore-stale-while-revalidate ignore-auth
reload squid config 後在觀察 發現 in-bound 果然大幅下降 而 log 也顯示 TCP_IMS_HIT / TCP_HIT / TCP_MEM_HIT 大量上升
流量的表現如下圖