Fro*_*dik 29 apache caching gzip
我有一个简单的问题.我有webdirectory /css,里面是文件style.css.我手动gzipped这个文件并保存为style.css.gz.我想节省CPU周期,以便在每次请求时都没有压缩CSS文件.如何配置Apache以查找此.gz文件并提供它而不是.css一遍又一遍地压缩文件?
注意:我不希望Apache自己创建.gz文件.在我的场景中,我必须.css.gz手动创建文件 - 在特定请求上使用PHP.
reg*_*ero 54
一些RewriteRule应该很好地处理它.
在Drupal配置文件中,我发现:
# AddEncoding allows you to have certain browsers uncompress information on the fly.
AddEncoding gzip .gz
#Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
Run Code Online (Sandbox Code Playgroud)
这将成为工作.<Directory foo/>如果您无权访问apache配置或者想要减慢Web服务器的速度,可以将其放在一个部分或.htaccess文件中.
小智 11
继续使用regilero回答你还应该添加几行,以确保服务器使用相应的Content-Encoding标头回答:
#Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=is_gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=is_gzip:1]
Header set Content-Encoding "gzip" env=is_gzip
Run Code Online (Sandbox Code Playgroud)
您可能希望使用此问题中讨论的内容,而不是自己使用mod_rewrite(并错过更高级的功能,如q值,状态406,TCN等)来实现内容协商.从那里复制我的答案:mod_negotiation
Options +MultiViews
RemoveType .gz
AddEncoding gzip .gz
<FilesMatch ".+\.tar\.gz$">
RemoveEncoding .gz
# Note: Can use application/x-gzip for backwards-compatibility
AddType application/gzip .gz
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
这对所有的工作的好处.gz的文件,而不是仅仅.css.gz与.js.gz和容易地扩展额外的编码.
它确实有一个主要缺点,因为只有对不存在的文件的foo.js请求才会被协商,一个名为的文件会请求/foo.js(但不会/foo)返回未压缩的版本.这可以通过使用FrançoisMarier解决方案重命名具有双扩展名的未压缩文件来避免,因此foo.js部署为foo.js.js.如果此限制对您的部署过程来说不是太痛苦,那么使用mod_negotiation可能值得考虑.
我意识到这不是你问的问题,但无论如何我都把它扔出去了.你有没有考虑简单地使用mod_cache与mod_gzip?使用正确的配置,apache将为您压缩文件,然后将压缩的缓存文件传递给客户端和下游代理.这比您在时间和精力方面的建议更有效,并且在带宽和计算负荷方面同样有效.
PHP首先压缩文件并不重要,因为正确设置mod_gzip会检测到这一点.重点是你可以缓存压缩文件,Apache不会重新压缩它们.