中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

squid如何強制緩存動態頁面

發布時間:2021-11-01 16:04:53 來源:億速云 閱讀:129 作者:柒染 欄目:系統運維

squid如何強制緩存動態頁面,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

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

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

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

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

因為我這邊本身就是用squid代理來解決Ajax中調用API的跨域問題的,所以自然是目標瞄準了squid的配置文件。

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

大家都知道squid會自動緩存靜態文件,可對于這種動態網頁怎么讓它也緩存起來呢,所以在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 來設定一些緩存規則,將google earth的請求強行緩存起來。

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

我也沒在意,估計人家功力問題  。先試著用改寫一下解決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

于是翻來覆去看文檔,找資料,發現是squid的bug惹得禍,不過早已經修正(嚴格來說是功能擴展補丁)。

我的squid是2.6.13,翻了一下源代碼,確實已經打好補丁了。

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

下面講一下問題所在。

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

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

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

而那個補丁正是對付這兩個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 ,這回里面終于出現
TCP_HIT/200 TCP_MEM_HIT/200 了,說明緩存規則確實起作用了,那個激動啊 555~~~~

====================
補充:
后來我看了一下google earth 服務器 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 應該是 kh.\.google才對。

最后總結一下,緩存Google Earth/Map的正確的配置應該是

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的圖片服務器
mtX.google.com 是google map 的圖片服務器
mapgoogle.mapabc.com 是google ditu的圖片服務器
http://nukq.malmam.com/archives/16

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晋中市| 临沭县| 遵义市| 普格县| 新田县| 盐山县| 武夷山市| 松桃| 兴国县| 岑溪市| 黔西县| 高碑店市| 荆州市| 双峰县| 轮台县| 阿克陶县| 木里| 措美县| 贵州省| 饶平县| 南澳县| 佛冈县| 绥滨县| 淳安县| 廊坊市| 敖汉旗| 会宁县| 铜川市| 罗田县| 洛扎县| 沂水县| 千阳县| 庄河市| 富顺县| 若羌县| 沛县| 阿图什市| 和顺县| 聊城市| 富源县| 宁陕县|