如何在Apache 2.x中使用mod_deflate预压缩文件?
时间:2020-03-05 18:56:47 来源:igfitidea点击:
我正在通过带有Content-Encoding:zip的apache服务所有内容,但是会即时压缩。我的大部分内容是磁盘上的静态文件。我想事先对文件进行gzip压缩,而不是每次请求时都压缩它们。
我相信,这是mod_gzip在Apache 1.x中自动完成的,只是在文件旁边带有.gz的文件。使用mod_deflate不再是这种情况。
解决方案
回答
无论如何,此功能在mod_gzip中放错了位置。在Apache 2.x中,我们可以通过内容协商来实现。具体来说,我们需要使用Options指令启用MultiViews,并需要使用AddEncoding指令指定编码类型。
回答
我们可以使用mod_cache代理内存或者磁盘上的本地内容。我不知道这是否可以和mod_deflate一起使用。
回答
mod_gzip也可以动态压缩内容。我们可以通过实际登录服务器并从shell进行压缩来预压缩文件。
cd /var/www/.../data/ for file in *; do gzip -c $file > $file.gz; done;
回答
要用非常简单的一行来回答我自己的问题,我在困惑中不见了:
Options FollowSymLinks MultiViews
我没有使用MultiViews选项。它位于Ubuntu默认的Web服务器配置中,因此请不要像我一样将其删除。
我还写了一个快速的Rake任务来压缩所有文件。
namespace :static do desc "Gzip compress the static content so Apache doesn't need to do it on-the-fly." task :compress do puts "Gzipping js, html and css files." Dir.glob("#{RAILS_ROOT}/public/**/*.{js,html,css}") do |file| system "gzip -c -9 #{file} > #{file}.gz" end end end
回答
我有一个从源代码构建的Apache 2,发现必须在httpd.conf文件中修改以下内容:
将MultiViews添加到选项:
Options Indexes FollowSymLinks MultiViews
取消注释AddEncoding:
AddEncoding x-compress .Z AddEncoding x-gzip .gz .tgz
评论AddType:
#AddType application/x-compress .Z #AddType application/x-gzip .gz .tgz