【问题标题】:Creating a great .htaccess file that handles shared resources well创建一个可以很好地处理共享资源的 .htaccess 文件
【发布时间】:2012-02-19 19:16:17
【问题描述】:

我正在尝试创建一个理想的 .htaccess 文件,该文件将勾选所有用于利用服务器压缩的框,但仅限于有意义的地方,以及公共代理上的资源缓存,再次是有意义的地方。我一直在摸索整个过程,我想我已经差不多了,但我怀疑可能还有一些技巧要做,我想我会邀请建议。我怀疑它还没有出现,因为我发现了一个很棒的工具,我必须首先与你分享。

www.pingdom.com 有一套很棒的网站分析工具,其中许多是免费使用的,我个人认为最好的是http://tools.pingdom.com/fpt/。这会向您显示页面每个元素的加载时间,但更重要的是,在它的“性能等级”选项卡下,它提供了哪些地方可以做得更好的细分。现在我使用了一些由 Google(和其他)提供的 JQuery 资源,我知道这些资源应该存在于许多代理服务器上。我不确定在我的 .htaccess 文件中怎么说(尽管我已经尝试过),果然,Pingdom 的分析包括以下反馈:

以下可公开缓存、可压缩的资源应具有 “Vary: Accept-Encoding”标头:

•http://jmar777.googlecode.com/svn/trunk/js/jquery.easing.1.3.js

•http://kwicks.googlecode.com/svn/branches/v1.5.1/Kwicks/jquery.kwicks-1.5.1.pack.js

好吧,我以为我已经做到了,但话又说回来,也许这取决于实际为这些资源提供服务的服务器来设置这些标头,也许我对此无能为力?是这样吗?无论如何,这是我目前的 .htaccess 文件。请注意,我的缓存设置非常低,因为我仍在尝试/学习它。我会在使用它之前进行调整。

suPHP_ConfigPath /home/mydomain/public_html
<Files php.ini>
order allow,deny
deny from all
</Files>

<ifModule mod_deflate.c>
<filesMatch "\.(js|css|php|htm|html)$">
SetOutputFilter DEFLATE
</filesMatch>
</ifModule>

# 1 HOUR
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|htm|html|)$">
Header set Cache-Control "max-age=3600, public"
</filesMatch>

# PHP - NO CACHING WANTED DUE TO USING SESSION COOKIES
<filesMatch "\.(php)$">
Header set Cache-Control "private"
</filesMatch>

# STORE BOTH COMPRESSED AND UNCOMPRESSED FILES FOR JS & CSS
<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary Accept-Encoding
  </FilesMatch>
</IfModule>

您可以看到我正在尝试在文件末尾执行“Vary Accept-Encoding”,但不确定是否需要这样做。我如何告诉客户访问 JQuery 之类的代理,这些文件无疑存储在其中,我还能做些什么来使我的 .htaccess 文件更快地交付和搜索引擎友好的内容?

感谢您的意见。

编辑:

看来我这里的问题不够清楚,所以这里有一些澄清:

1) 是由 Google 托管的 JQuery 库,它的代理可用性在某种程度上受我的 .htaccess 设置的控制,因为我在我的 PHP 中对它进行了远程引用,如果是这样,我该怎么说,在我的 .htaccess 文件,“请将该库在代理中缓存一年左右”?

2) 我应该如何指定应该通过“Vary Accept-Encoding”提供压缩和未压缩的 Google 托管文件?我猜我会说这两个问题都在 Google 的控制之下,而不是我的,所以要明确说明......

3) 像 JQuery 库这样的文件的压缩选择和代理是在我的控制之下还是在(在这种情况下)谷歌的控制之下?

4) 一般来说,我的 .htaccess 文件中的任何内容是否以次优(冗长)的方式表达,我该如何缩短/压缩它?

5) .htaccess 文件中的任何内容是否以可能导致问题的方式排序 - 例如,我在三个单独的规则下引用 CSS - 顺序是否重要?

(编辑结束)。

【问题讨论】:

  • 不知道你为什么主要做商业产品的广告。有一些主要的 FLOSS 工具可以完成基本相同的工作,例如 google pagespeed 扩展。恕我直言,这篇文章属于博客而不是 SO。
  • 牙线是用来清洁牙齿的东西。为什么你认为其他人都和你一样了解计算机?你的傲慢令人震惊,因为你继续示范标记我的问题。我猜你只是鄙视那些没有像你一样受过教育的人。那你还敢说你的‘卑微’意见?!!顺便说一句,我高度评价了那个网站,因为它值得。 Stack Overflow 也是一种“商业产品”,还是您认为所有者运行它是为了帮您?提及伟大的产品是没有理由指责的。如果你不能回答我的问题,请退出。
  • 也许我没有很好地解释自己。是的,我确实给你打了分,不是因为对你有任何意见——我怎么能形成这种看法?但是因为我对你的帖子的评估不是一个具体的Q,而是一篇关于在早期开发中优化.htaccess的文章。正如我所说,我觉得这类东西属于博客。如果您愿意,请使用 IMO,只是 IMHO 是更常见的用法。您希望我们从哪里开始批评?
  • 也许您可以从处理和合并这些Web Performance Best Practices 开始,并阅读本网站上有关特定方面的许多问答。我很乐意回答真正的问题或澄清任何你不明白的事情。
  • 我阅读了“最佳实践”文档作为使用“那个”网站的结果。我理解了其中的 25%,这就是我尝试在这里提问的原因。逐一列举问题占用的空间超出了此评论部分所允许的范围,因此我对原始问题进行了编辑,在该问题中我尽可能具体地提出问题。

标签: .htaccess caching proxy compression


【解决方案1】:

是 JQuery 库,托管在 Google,它的代理可用性在某种程度上受我的 .htaccess 设置的控制,因为我在我的 PHP 中远程引用它,如果是这样,我应该怎么说,在我的 .htaccess 设置中。 htaccess 文件,“请将该库在代理中缓存一年左右”?

这个断言是不正确的。浏览器决定缓存与否,下载与否仅取决于 that 请求的标头交换。因此,如果查询响应涉及对多站点的请求,那么您的 .htaccess 文件只会影响它缓存文件的方式。如何缓存 Google 的内容由 Google 决定。例如,对http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js 的请求收到了响应头:

Age:133810
Cache-Control:public, max-age=31536000
Date:Fri, 17 Feb 2012 21:52:27 GMT
Expires:Sat, 16 Feb 2013 21:52:27 GMT
Last-Modified:Wed, 23 Nov 2011 21:10:59 GMT

浏览器通常会缓存一年,但可能会决定在重用时重新验证:

If-Modified-Since:Wed, 23 Nov 2011 21:10:59 GMT

在这种情况下,ajax.googleapis.com 将回复 301 和以下标题:

Age:133976
Date:Fri, 17 Feb 2012 21:52:27 GMT
Expires:Sat, 16 Feb 2013 21:52:27 GMT

此简短的请求/响应对话通常需要约 50 毫秒,因为此内容是 CDN 交付的。

您可能希望在此基础上修改您的其他补充 Q,因为有些不适用

【讨论】:

  • 您在打开“浏览器决定是否缓存”时说,这让我觉得您在谈论浏览器缓存。我说的是代理缓存。除非我在这里完全误解了,否则我认为代理服务器存在于 ISP 附近/处,它们缓存其他用户看到的内容,只要相关的标头告诉这些代理存储它们以及存储多长时间。我不是在谈论浏览器和浏览器缓存。
  • 我自己只使用过 Vanish 和 Apache TS,所以我不了解所有这些产品,但总的来说 ISP没有 将任何缓存层作为标准部件他们的基础架构架构,所以我对你从哪里得到这种印象很感兴趣。尽管亚马逊、Facebook、WP 等大型最终用户服务......确实实施了自己的服务。其次,您认为任何代理从哪里获取其缓存元数据?请参阅 MW:Cache strategy 作为稍微过时的示例。
  • Here 是我设置 OpenOffice.org 论坛缓存架构的方式。
  • 所有主要的 ISP 都在代理服务器基础设施上进行了大量投资,原因显而易见,其中最明显的原因是为了节省他们销售的主要商品 - 带宽。如果你不知道我现在明白了为什么你不明白我在这里提问的目的。尝试阅读您引用给我的 Web 性能源,尤其是一页一页的链接一“- 优化缓存 — 使您的应用程序的数据和逻辑完全脱离网络”。它引入了代理缓存,并将其作为与浏览器缓存完全不同的重要主题来处理,因为它确实如此。
  • 弗兰克,我知道它们是什么。我已经为我管理的系统设置了几个。但是“所有主要的 ISP”? - 我处理的共享托管服务提供商都没有使用它们。我是来帮忙的,不是为了被新人骂脏话。这是我与你的最后一次交流。
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 2010-11-30
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多