4

我们希望减少其中一台 Web 服务器的负载,并且正在运行一些将 squid 配置为反向代理的测试。

配置在下面的备注中:

http_port 80 加速 defaultsite=original.server.com

cache_peer original.server.com parent 80 0 无查询 originserver name=myAccel

acl our_sites dstdomain .contentpilot.net

http_access 允许我们的站点

cache_peer_access myAccel 允许 our_sites

cache_peer_access myAccel 全部拒绝

我们遇到的情况是服务器几乎一直在返回 TCP_MISS。

1238022316.988     86 69.15.30.186 TCP_MISS/200 797 GET http://original.server.com/templates/site/images/topnav_givingback.gif - FIRST_UP_PARENT/myAccel -
1238022317.016     76 69.15.30.186 TCP_MISS/200 706 GET http://original.server.com/templates/site/images/topnav_diversity.gif - FIRST_UP_PARENT/myAccel -
1238022317.158     75 69.15.30.186 TCP_MISS/200 570 GET http://original.server.com/templates/site/images/topnav_careers.gif - FIRST_UP_PARENT/myAccel -
1238022317.344     75 69.15.30.186 TCP_MISS/200 2981 GET http://original.server.com/templates/site/js/home-search-personalization.js - FIRST_UP_PARENT/myAccel -
1238022317.414     85 69.15.30.186 TCP_MISS/200 400 GET http://original.server.com/templates/site/images/submenu_arrow.gif - FIRST_UP_PARENT/myAccel -
1238022317.807     75 69.15.30.186 TCP_MISS/200 2680 GET http://original.server.com/templates/site/js/homeMakeURL.js - FIRST_UP_PARENT/myAccel -
1238022318.666   1401 69.15.30.186 TCP_MISS/200 103167 GET http://original.server.com/portalresource/lookup/wosid/intelliun-2201-301/image2.jpg - FIRST_UP_PARENT/myAccel image/pjpeg
1238022319.057   1938 69.15.30.186 TCP_MISS/200 108021 GET http://original.server.com/portalresource/lookup/wosid/intelliun-2201-301/image1.jpg - FIRST_UP_PARENT/myAccel image/pjpeg
1238022319.367     83 69.15.30.186 TCP_MISS/200 870 GET http://original.server.com/templates/site/images/home_dots.gif - FIRST_UP_PARENT/myAccel -
1238022319.367     80 69.15.30.186 TCP_MISS/200 5052 GET http://original.server.com/templates/site/images/home_search.jpg - FIRST_UP_PARENT/myAccel -
1238022319.368     88 69.15.30.186 TCP_MISS/200 5144 GET http://original.server.com/templates/site/images/home_continue.jpg - FIRST_UP_PARENT/myAccel -
1238022319.368     76 69.15.30.186 TCP_MISS/200 412 GET http://original.server.com/templates/site/js/showFooterBar.js - FIRST_UP_PARENT/myAccel -
1238022319.377    100 69.15.30.186 TCP_MISS/200 399 GET http://original.server.com/templates/site/images/home_arrow.gif - FIRST_UP_PARENT/myAccel -

我们已经尝试删除所有缓存内存。有任何想法吗。可能是我的网站每次都标记了一些不同的内容,即使它自代理上次请求以来没有改变?

4

2 回答 2

3

原始服务器(Web 服务器)将哪些标头与您的内容一起发回?为了被 squid 缓存,我相信您通常必须在响应标头中指定 Last-Modified 或 ETag。Web 服务器通常会自动为静态内容执行此操作,但如果您的内容是动态提供的(即使来自静态源),那么您必须确保它们在那里,并处理请求标头,例如 If-Modified-Since 和 If-无匹配。

另外,由于我在您随后关于会话的问题中指出了这个问题——响应中是否出现“Vary”标题?例如,“Vary: Cookie”告诉缓存内容可以根据请求中的 Cookie 标头而变化:因此静态内容希望将其删除。但是,如果存在会话,您的 Web 服务器可能会将其添加到所有请求中,而不管所提供数据的静态/动态性质如何。

根据我的经验,对 HTTP 标头进行一些实验以了解对缓存的影响是非常有益的:我记得发现解决方案并不总是显而易见的。

于 2009-04-17T11:03:53.313 回答
1

检查在 firefox 中使用 wireshark 或 firebug 返回的标头(后者更容易处理,但如果您最终需要,前者会为您提供更多低级信息)。

在响应标头中查找这些项目(单击“网络”视图中的项目以展开它并查看请求和响应标头):

  • Last-Modified date -> 如果没有设置为过去的合理时间,则不会被缓存
  • Etags -> 如果每次请求相同的项目时这些更改,那么它将被重新获取
  • Cache-Control -> 来自客户端的请求 max-age=0 将(我相信)每次都请求页面的新副本
  • (edit) Expires header -> 如果这是在过去设置的(即总是过期的)那么 squid 将不会缓存它

正如 araqnid 所建议的,HTTP 标头可以对代理认为它可以缓存的内容产生巨大的影响。如果您的后端使用的是 apache,那么测试在不通过任何 PHP 或其他应用程序层的情况下提供的静态文件是否可缓存。

另外,检查 max_object_size 和 minimum_object_size 的 squid 设置是否设置为合理值(默认为 4Mb 和 0kb,应该没问题),并且最大缓存项年龄也设置合理。(有关此设置和其他设置,请参见http://www.visolve.com/squid/squid30/cachesize.php#maximum_object_size )

于 2009-04-21T10:48:27.000 回答