麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網管 > 服務器 > 正文

squid 強制緩存動態頁面

2020-05-27 12:55:15
字體:
來源:轉載
供稿:網友

   其實我本不想寫這個標題,我的本意是緩存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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲精品久久久久久久久久 | 深夜视频福利 | 久久久成人精品视频 | 成人超碰 | 欧美a级在线免费观看 | 狠狠操视频网站 | 亚洲成人欧美在线 | 欧美成人小视频 | 一级大片久久 | 国产一国产精品一级毛片 | 国产成人精品无人区一区 | 国产羞羞视频在线观看 | 在线播放免费人成毛片乱码 | 国产午夜精品一区二区三区免费 | 欧美成人性色区 | 一级一级一级毛片 | 99麻豆久久久国产精品免费 | 九九色在线观看 | 日日碰日日操 | 中文字幕在线观看91 | 久章草在线视频 | 欧美日韩夜夜 | 久久精品99久久久久久2456 | 龙床上的呻吟高h | av成人在线电影 | 午夜精品在线视频 | 成人国产精品一区 | 国产亚洲精品综合一区91 | 久久精品视频7 | 久久久久久久久久久av | 亚洲字幕av | 97中文字幕第一一一页 | 日本不卡一区二区三区在线 | 中文字幕在线观看视频一区 | 男女羞羞视频在线观看免费 | 欧美1区2区在线观看 | 久久精精 | 极品国产91在线网站 | 久久综合久久精品 | 久久成人福利 | 在线看91|