閱讀126 返回首頁    go 中電雲集


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

  上一篇:go 獲取用戶IP地址的三個屬性的區別(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
  下一篇:go linux分類查看網絡連接情況