我通过Content-Encoding: zip通过apache提供所有内容,但是会即时压缩。 我的大部分内容是磁盘上的静态文件。 我想事先对文件进行gzip压缩,而不是每次请求时都压缩它们。

我相信, mod_gzip是在Apache 1.x中自动完成的,但是旁边只有.gz文件。 mod_deflate不再是这种情况。

===============>>#1 票数:13 已采纳

无论如何,此功能在mod_gzip中放错了位置。 在Apache 2.x中, 您可以通过content negotiation来实现 具体来说,您需要使用Options指令启用MultiViews ,并且需要使用AddEncoding指令指定编码类型。

===============>>#2 票数:8

要用非常简单的一行来回答我自己的问题,我在困惑中不见了:

Options FollowSymLinks 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

===============>>#3 票数:5

恐怕MultiViews不能按预期工作:文档说Multiviews可以工作:“如果服务器收到对/ some / dir / foo的请求,如果/ some / dir启用了MultiViews,并且/ some / dir / foo不存在。 ..”,换句话说:如果您在同一目录中有文件foo.js和foo.js.gz,即使激活了MultiViews,即使通过Windows传输了AcceptEncoding gzip标头,也不会导致发送.gz文件。浏览器(您可以通过临时禁用mod_deflate并使用HTTPFox监视响应来验证此行为)。

我不确定MultiViews是否可以解决此问题(也许您可以重命名原始文件,然后添加特殊的AddEncoding指令),但是我相信您可以构造一个mod_rewrite规则来处理此问题。

===============>>#4 票数:4

尽管有点mod_negotiation但可以使用mod_negotiation提供预压缩文件。 主要的困难是只能协商不存在的文件的请求 所以,如果foo.jsfoo.js.gz都存在,反应/foo.js永远是未压缩的(虽然反应/foo会正常工作)。

我发现(最简单的解决方案,从弗朗索瓦·马里尔 )是具有双重文件扩展名重命名未压缩的文件,所以foo.js被部署为foo.js.js所以请求/foo.js之间的谈判foo.js.js (没有编码)和foo.js.gz (gzip编码)。

我将该技巧与以下配置结合在一起:

Options +MultiViews
RemoveType .gz
AddEncoding gzip .gz

# Send .tar.gz without Content-Encoding: gzip
<FilesMatch ".+\.tar\.gz$">
    RemoveEncoding .gz
    # Note:  Can use application/x-gzip for backwards-compatibility
    AddType application/gzip .gz
</FilesMatch>

写了一篇文章 ,详细讨论了这种配置的原因以及一些替代方案。

===============>>#5 票数:4

我有一个从源代码构建的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 

===============>>#6 票数:1

mod_gzip也可以动态压缩内容。 您可以通过实际登录服务器并从Shell进行压缩来预压缩文件。

cd /var/www/.../data/
for file in *; do
    gzip -c $file > $file.gz;
done;

===============>>#7 票数:0

我有很多大的.json文件。 大多数读者都处于这种情况。 预览答案没有讨论返回的“内容类型”。

我要以下请求透明地返回带有“ Content-Type:application / json”的预压缩文件,将Multiview与ForceType一起使用

http://www.domain.com/(...)/bigfile.json
-> Content-Encoding:gzip, Content-Type: Content-Encoding:gzip

1)文件必须重命名:“ file.ext.ext”

2)Multiview与ForceType一起使用效果很好

在文件系统中:

// Note there is no bigfile.json
(...)/bigfile.json.gz
(...)/bigfile.json.json

在您的apache配置中:

<Directory (...)>
    AddEncoding gzip .gz
    Options +Multiviews
    <Files *.json.gz>
        ForceType application/json
    </Files>
</Directory>

简短:)

===============>>#8 票数:0

您可以使用mod_cache代理内存或磁盘中的本地内容。 我不知道mod_deflate是否能按预期工作。

  ask by Otto translate from so

未解决问题?本站智能推荐:

1回复

mod_deflate对不应该gzip的MIME类型的gzips响应

我在Red Hat 6.4上的Tomcat应用程序前面有一个Apache 2.2.15实例作为代理。 我正在尝试将Apache实例配置为gzip对客户端的某些(列入白名单的内容类型)响应。 Apache正在使用mod_jk连接到Tomcat(尽管在使用mod_proxy时存在相同的问题,所以
1回复

Apache 2.x mod_deflate压缩仅适用于OSX

Apache2在Mac的安装中成功流式传输了预压缩的内容。 我可以使用index.gz,textfile.gz等文件,并且它们都可以在浏览器中正常加载。 但是,当我尝试在其他Apache环境(如Ubuntu和CentOS安装)上创建相同的配置时,gzip内容永远不会在浏览器中呈现; 它
1回复

Apache 2.4.10 mod_deflate未压缩的小响应大小

我在一段时间之前将apache从2.2版更新到2.4版,现在所有的响应都不再被mod_deflate压缩了。 限制似乎是68个字节。 我试图找到一些设置,但找不到任何东西 - 它甚至可以配置? 例: 响应不是gzip压缩: 添加一个字符后: 响应标头正常,内容已
1回复

PHP错误压缩mod_deflate gzip压缩

我按照这种方式压缩1和压缩2 如何用mod_deflate压缩? 我已经按照上面的链接成功进行了压缩,但是浏览器无法读取压缩? 在浏览器中打开css和js文件时出现错误! 语法错误:非法字符 {{F7" ƫ 和 KEO©¬NJLÎN/ E /ÍKÑMÎÏÉ/²R
1回复

无法在Apache / CentOS7上启用mod_deflate

我从一个好的来源开始遵循一个简单的教程,并且gzip压缩不起作用。 1)我运行以下命令查看是否已安装mod_deflate: 我得到了deflate_module(共享),所以就在那里。 2)我创建了一个新文件/etc/httpd/conf.d/mod_deflate.con
1回复

如何判断mod_deflate在Apache中被禁用?

是否有.htaccess的行可以告诉mod_deflate在Apache上已禁用? 像这样:
1回复

如何设置mod_deflate首选压缩方法进行压缩

当请求标头Accept-Encoding为gip, deflate时,mod_deflate总是发送gzip数据。 我怎样才能告诉mod_deflate首选发送deflate (不是zlib )而不是gzip ? 如果这不可能...开发人员为什么在无法放气时将模块命名为mod_def
1回复

在Apache 2.4中启用mod_deflate

我的旧服务器正在运行Apache 2.2。 它启用了mod_deflate。 这是一个非常简单的设置,您只需取消注释LoadModule行,然后添加以下内容: 但是现在我正在建立一个运行Apache 2.4的新服务器。这在2.4中不起作用,我不知道为什么。 一切似乎都已正确启用和配
1回复

启用mod_deflate后,Apache 2.4.7未发送304响应

我在Ubuntu Server 14.04上运行Apache 2.4.7 我有一个运行中的网络服务器。 它返回针对图像304 modified的304 modified ,但对于json文件却返回的结果相同。 我已经检查了本帖和本帖的答案和评论,但是,它们对我不起作用。 在我的.
6回复

mod_deflate vs mod_gzip

有人能告诉我以下脚本在CP​​U负载性能和压缩方面的区别吗?