2

我需要 Apache 上的手动压缩解决方案。我的目标:

  • 在我的服务器上提供 gzip 编码的内容以及未压缩的内容。
  • 文件是预压缩的。
  • 并非所有文件都经过压缩处理。我想指定这些文件,并且选择不是基于类型(扩展名)的。
  • 提供了许多内容类型(自定义类型),并且不时出现新类型。此外,文件扩展名不能确定它是否会被压缩(!!!)。
  • 保持开销最小(额外的标头越少越好)。
  • 始终提供 Content-Length 标头并且从不发送分块响应(这会取消资格mod_deflate)。

理想的功能

理想的功能应该是这样的:

  • Web 客户端请求文件file.ext
  • 如果file.ext.gz服务器上存在:
    • Content-Encoding设置为gzip
    • Content-Type设置为file.ext( !!! ) 的值。
    • 服务器返回file.ext.gz
  • 否则,file.ext返回。

我测试了很多解决方案,这篇文章包含了一个很好的编译,但是标有(!!!)的部分总是有问题。我有数十万个文件和数十种内容类型,因此我正在寻找一些自动解决方案,而无需ForceType为每个文件添加。


我试过的

多视图

这是如何工作的:

  • 将文件重命名file.extfile.ext.en
  • 创建文件file.ext.gz
  • 配置阿帕奇:

    选项 + 多视图
    AddEncoding x-gzip .gz
    删除类型 .gz
    

几乎可以按预期工作,只是它要求原始文件 ( file.ext) 不存在,并且它添加了许多(对我来说无用)无法删除的标题(TCN以及Content-Language更多)(Header unset不会删除它们)。

改写

这是如何工作的: - 创建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,但我没有找到如何做到这一点的方法。file.extfile.ext.gz

4

0 回答 0