• <tr id='2dzb9'><strong id='2dzb9'></strong><small id='2dzb9'></small><button id='2dzb9'></button><li id='2dzb9'><noscript id='2dzb9'><big id='2dzb9'></big><dt id='2dzb9'></dt></noscript></li></tr><ol id='2dzb9'><table id='2dzb9'><blockquote id='2dzb9'><tbody id='2dzb9'></tbody></blockquote></table></ol><u id='2dzb9'></u><kbd id='2dzb9'><kbd id='2dzb9'></kbd></kbd>
    1. <acronym id='2dzb9'><em id='2dzb9'></em><td id='2dzb9'><div id='2dzb9'></div></td></acronym><address id='2dzb9'><big id='2dzb9'><big id='2dzb9'></big><legend id='2dzb9'></legend></big></address><dl id='2dzb9'></dl>
      <ins id='2dzb9'></ins>

        1. <span id='2dzb9'></span>
        2. <i id='2dzb9'></i>

          <code id='2dzb9'><strong id='2dzb9'></strong></code>
          <i id='2dzb9'><div id='2dzb9'><ins id='2dzb9'></ins></div></i>

            <fieldset id='2dzb9'></fieldset>

            squid 强制缓存动态页面

            • 时间:
            • 浏览:9
            • 来源:124软件资讯网

                实在我本不想写这个题目 ,我的本意是缓存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