我需要 Apache 上的手动压缩解决方案。我的目标:
- 在我的服务器上提供 gzip 编码的内容以及未压缩的内容。
- 文件已预先压缩。
- 并非所有文件都经过压缩。我想指定这些文件,并且选择不是基于类型(扩展名)的。
- 提供许多内容类型(自定义内容类型),并且不时出现新类型。此外,文件扩展名并不能决定它是否会被压缩(!!!).
- 保持开销最小(额外的标头越少越好)。
- 始终提供 Content-Length 标头,并且从不发送分块响应(这会取消资格
mod_deflate
).
理想的功能
理想的功能应该像这样工作:
- Web 客户端请求文件
file.ext
.
- If
file.ext.gz
exists on server:
-
Content-Encoding
被设定为gzip
.
-
Content-Type
设置为值file.ext
(!!!).
- 服务器返回
file.ext.gz
.
- 否则,
file.ext
被返回。
我测试了多种解决方案,本文 http://www.cravediy.com/59-Simple-gzip-Support-for-Apache-with-mod_rewrite.html包含一个很好的编译,但是标有 ( 的部分总是有问题!!!)。我有数十万个文件和数十种内容类型,因此我正在寻找一些自动解决方案,而不需要添加ForceType
对于每个文件。
我尝试过的
多视图
这是如何运作的:
几乎按预期工作,除了它需要原始文件(file.ext
)不存在,它添加了许多(对我来说无用的)标题(TCN
, Content-Language
以及更多)无法删除的(Header unset
不会删除它们)。
Rewrite
这是如何运作的:
- 创造file.ext.gz
文件。
- 配置阿帕奇:
<pre>
RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)$ $1.gz [L]
AddEncoding x-gzip .gz
<Files file.ext>
ForceType my-custom/mime-type
</FilesMatch>
</pre>
这效果很好,但需要ForceType
对于每个压缩文件。正如我之前所说,我不能依赖扩展名,因为并非所有特定类型的文件都会被压缩。
mod_deflate
我没有调查太多,问题是如果文件太大,那么它会被分成几块并以块的形式发送Content-Length
未提供。增加压缩缓冲区的大小并不能消除这个问题。
是否有可能将 Apache 配置为按我希望的方式工作?
我试图动态获取Content-Type
of file.ext
并将其设置为file.ext.gz
,但我没有找到如何做到这一点的方法。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)