国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

squid 強(qiáng)制緩存動態(tài)頁面

2020-06-13 12:28:58
字體:
供稿:網(wǎng)友
其實(shí)我本不想寫這個標(biāo)題,我的本意是緩存yupoo api的查詢數(shù)據(jù),這個過程中找到了參考方法
 
 

其實(shí)我本不想寫這個標(biāo)題,我的本意是緩存yupoo api的查詢數(shù)據(jù),這個過程中找到了參考方法(Caching Google Earth with Squid)。呵呵,所以偶也來一回標(biāo)題黨。

這篇參考流傳非常廣,Digg上也被提過,我也不知道原出處是哪里了。

可是。。。。你按照它的指示設(shè)置,它并不能正確工作!!

話說回來,先說說我的需求。

最近yupoo的訪問速度很慢,我有一堆a(bǔ)pi請求經(jīng)常無法完成,猜測要么對方限制了同一ip的連接數(shù),要么是yupoo又遇到了新一輪的流量瓶頸。跟Yupoo的zola聯(lián)系后,確認(rèn)是他們的負(fù)荷太高引起的,并沒有限制連接數(shù)。所以我要想辦法在我這邊做一些緩存了。

因?yàn)槲疫@邊本身就是用squid代理來解決Ajax中調(diào)用API的跨域問題的,所以自然是目標(biāo)瞄準(zhǔn)了squid的配置文件。

yupoo api的請求地址是 www.yupoo.com/api/rest/?method=xx&xxxxxxx...

大家都知道squid會自動緩存靜態(tài)文件,可對于這種動態(tài)網(wǎng)頁怎么讓它也緩存起來呢,所以在google上找啊找,找到上面提得那片緩存Google Earth的博客文章。
他的方法是:

acl QUERY urlpath_regex cgi-bin /? intranet
acl forcecache url_regex -i kh.google keyhole.com
no_cache allow forcecache
no_cache deny QUERY

# ----
refresh_pattern -i kh.google 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload

refresh_pattern -i keyhole.com 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload

原理就是用 no_cache allow 和 refresh_pattern 來設(shè)定一些緩存規(guī)則,將google earth的請求強(qiáng)行緩存起來。

此文一出,自然早有人去驗(yàn)證,可是沒人成功,原作者也音訊全無  ... squid的郵件列表里也提到。 ( 看標(biāo)題進(jìn)來的朋友,不要急,繼續(xù)往下讀,不會讓你空手而回的  )

我也沒在意,估計人家功力問題  。先試著用改寫一下解決yupoo api的緩存問題。

acl QUERY urlpath_regex cgi-bin /?
acl forcecache url_regex -i yupoo/.com
no_cache allow forcecache
no_cache deny QUERY

refresh_pattern -i yupoo/.com 1440 50% 10080 override-expire override-lastmod reload-into-ims ignore-reload

嘿,果然nnd毫無用處,訪問記錄里還是 一坨坨 TCP_MISS

于是翻來覆去看文檔,找資料,發(fā)現(xiàn)是squid的bug惹得禍,不過早已經(jīng)修正(嚴(yán)格來說是功能擴(kuò)展補(bǔ)丁)。

我的squid是2.6.13,翻了一下源代碼,確實(shí)已經(jīng)打好補(bǔ)丁了。

解決這個問題需要refresh_pattern的幾個擴(kuò)展參數(shù)(ignore-no-cache ignore-private),這幾個參數(shù)在squid的文檔和配置例子中均沒有提到,看來squid還不夠與時俱進(jìn)。

下面講一下問題所在。

先看看yupoo api返回的HTTP頭部信息(cache 相關(guān)部分)

Cache-Control: no-cache, must-revalidate
Pragma: no-cache

這兩行是控制瀏覽器的緩存行為的,指示瀏覽器不得緩存。squid也是遵循RFC的,正常情況下自然不會去緩存這些頁面。override-expire override-lastmod reload-into-ims ignore-reload 統(tǒng)統(tǒng)不能對付它。

而那個補(bǔ)丁正是對付這兩個Cache-Control:no-cache 和 Pragma: no-cache的。

因此把 refresh_pattern那句要改寫成

refresh_pattern -i yupoo/.com 1440 50% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private

這樣就大功告成了, squid -k reconfigure 看看 access.log ,這回里面終于出現(xiàn)
TCP_HIT/200 TCP_MEM_HIT/200 了,說明緩存規(guī)則確實(shí)起作用了,那個激動啊 555~~~~

====================
補(bǔ)充:
后來我看了一下google earth 服務(wù)器 hk1.google.com的HTTP頭部,只有

Expires: Wed, 02 Jul 2008 20:56:20 GMT
Last-Modified: Fri, 17 Dec 2004 04:58:08 GMT

,這么看來照理不需ignore-no-cache ignore-private也能工作,可能是作者這里寫錯了
kh.google 應(yīng)該是 kh./.google才對。

最后總結(jié)一下,緩存Google Earth/Map的正確的配置應(yīng)該是

acl QUERY urlpath_regex cgi-bin /? intranet
acl forcecache url_regex -i kh./.google mt./.google mapgoogle/.mapabc keyhole.com
no_cache allow forcecache
no_cache deny QUERY

# ----
refresh_pattern -i kh./.google 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i mt./.google 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i mapgoogle/.mapabc 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private

refresh_pattern -i keyhole.com 1440 20% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private

注:
khX.google.com 是google earth的圖片服務(wù)器
mtX.google.com 是google map 的圖片服務(wù)器
mapgoogle.mapabc.com 是google ditu的圖片服務(wù)器 
http://nukq.malmam.com/archives/16



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 古田县| 白河县| 彭泽县| 聂拉木县| 阆中市| 莱西市| 镇安县| 普兰县| 锡林浩特市| 屏边| 曲阜市| 温宿县| 保定市| 新营市| 怀仁县| 巍山| 抚顺县| 元谋县| 康定县| 巴林左旗| 金沙县| 邳州市| 临漳县| 布尔津县| 乐亭县| 汝阳县| 北海市| 黔南| 尤溪县| 枞阳县| 高邮市| 陵川县| 沾益县| 北海市| 唐山市| 平原县| 达日县| 丁青县| 蓬安县| 垦利县| 昌图县|