如何在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