126
中電雲集
Squid中的日誌出現TCP_CLIENT_REFRESH_MISS的問題排除
今天檢查Squid發現大量的日誌出現TCP_CLIENT_REFRESH_MISS,見到Cacti中的流量,自己的CDN節點命令不高,查了很久的原因,最後發現,原來是exe的文件下載的原因.
花了半天的時間才解決這個問題,要解決這個問題。
必須提到幾個參數
range_offset_limit 和 reload_into_ims
range_offset_limit這個參數,主要是對各種流媒體和要斷點續傳的文件的緩存的。缺省是0,也就是說隻要client發過來的http header裏包含了“Range:” ,squid會把這個請求轉到後端http server,最致命的是,http server返回的內容並不會進入squid的cache store。
range_offset_limit就派上用場了,把它的值設置為-1;然後squid會把Range頭去掉,而從後端http server把內容全部抓下來,放到cache store裏,隨後的對該cache的訪問就不再轉發到後端http server,可以大大提高命中率。也可以給這個參數設置一個值,會提前下載多少內容.但要注意,這個參數不要大過maximum_object_size ,不然下載完了,maximum_object_size 這個參數不能緩存這麼多,又刪除這個文件.白白點用你的流量.
reload_into_ims 這個參數,要分清哦,不是refresh_pattern中的參數,他是一個單獨的參數.
在flashget和迅雷之類的軟件,下載時發送http header時會包含下列信息:
Cache-Control:no-cache
Pragma:no-cache
這樣的話squid主機接受這http header以後會讓squid服務器直接連接web server取新的數據。這樣對服務器很大的壓力,因為服務器的過期時間是後麵的程度控製,不方便用refresh_pattern的 ignore-reload 參數強行忽略請求裏的任何no-cache指令,這時隻有使用reload_into_ims這個參數.
打開這個參數為on ,就行,這個參數違反 HTTP 協議,但是對大部分網站來說是可以設置為 on 的,隻要後端服務器對
If-Modified-Since 頭的判斷正確即可。
下麵是參數解釋
When you enable this option, client no-cache or “reload” requests will be changed to If-Modified-Since requests.
如果客戶端送過來no-cache的http頭,和刷新重新載入他的瀏覽器時,裝改變成請求變成 If-Modified-Since的請求.
最後更新:2017-01-04 22:34:32