<-
Apache HTTP 服务器 2.4 > Apache模块mod_deflate

Apache模块mod_deflate

描述:在将内容交付给客户端之前先对其进行压缩
状态:延期
模块标识符:deflate_module
源文件:mod_deflate.c

摘要

mod_deflate模块提供了DEFLATE输出过滤器,该过滤器允许您压缩服务器中的输出,然后再通过网络发送给客户端。

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

支持的编码

gzip编码是唯一支持与旧浏览器实现完全兼容的编码。在deflate不支持的编码,请检查zlib的文档 的完整的解释。

最佳

样本配置

压缩和TLS

当TLS连接携带压缩的压缩数据时,某些Web应用程序容易受到信息泄露攻击。有关更多信息,请查看“ BREACH”攻击家族的详细信息。

这是压缩常见的基于文本的内容类型的简单配置。

仅压缩几种类型

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
最佳

启用压缩

压缩和TLS

当TLS连接携带压缩的压缩数据时,某些Web应用程序容易受到信息泄露攻击。有关更多信息,请查看“ BREACH”攻击家族的详细信息。

输出压缩

压缩由DEFLATE 过滤器实现。以下伪指令将对文件所在的容器中的文档启用压缩:

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip

通常,如果要将压缩限制为特定的MIME类型,则可以使用AddOutputFilterByType指令。这是仅对Apache文档的html文件启用压缩的示例:

<Directory "/your-server-root/manual">
    AddOutputFilterByType DEFLATE text/html
</Directory>

注意

DEFLATE过滤器过滤资源,如PHP或SSI之后总是插入。它从不涉及内部子请求。

注意

有一个环境变量force-gzip,通过设置SetEnv,它将忽略浏览器的接受编码设置,并发送压缩的输出。

输出减压

mod_deflate模块还提供了用于对gzip压缩响应主体进行充气/解压缩的过滤器。为了激活此功能,您必须INFLATE使用SetOutputFilter或将过滤器插入输出过滤器链AddOutputFilter,例如:

<Location "/dav-area">
    ProxyPass "http://example.com/"
    SetOutputFilter INFLATE
</Location>

本示例将解压缩example.com的gzip输出,因此其他过滤器可以对其进行进一步处理。

输入解压缩

mod_deflate模块还提供了用于解压缩gzip压缩请求主体的过滤器。为了激活此功能,您必须DEFLATE使用SetInputFilter或将过滤器插入输入过滤器链中AddInputFilter,例如:

<Location "/dav-area">
    SetInputFilter DEFLATE
</Location>

现在,如果请求包含Content-Encoding: gzip标头,则正文将自动解压缩。很少有浏览器能够gzip请求正文。但是,某些特殊应用程序实际上确实支持请求压缩,例如某些WebDAV客户端。

关于内容长度的注意事项

如果您自己评估请求正文,请不要相信Content-Length标题! Content-Length标头反映了来自客户端的传入数据的长度,而不是解压缩的数据流的字节数。

最佳

处理代理服务器

mod_deflate模块发送Vary: Accept-EncodingHTTP响应标头,以警告代理缓存的响应应仅发送给发送适当Accept-Encoding请求标头的客户端。这样可以防止将压缩的内容发送给无法理解的客户端。

如果您使用某些依赖于User-Agent标题的特殊排除,则必须手动配置Vary标题的附加项以向代理警告其他限制。例如,在典型的配置中,DEFLATE 过滤器的User-Agent添加取决于,您应该添加:

Header append Vary User-Agent

如果关于压缩的决定取决于请求标头(例如 HTTP版本)以外的其他信息,则必须将 Vary标头设置为value *。这样可以防止兼容代理完全缓存。

Header set Vary *
最佳

提供预压缩的内容

由于mod_deflate每次发出请求时都会重新压缩内容,因此可以通过预压缩内容并告知mod_deflate服务而不重新压缩内容来获得一些性能优势。可以使用类似以下的配置来完成此操作:

<IfModule mod_headers.c>
    # Serve gzip compressed CSS and JS files if they exist
    # and the client accepts gzip.
    RewriteCond "%{HTTP:Accept-encoding}" "gzip"
    RewriteCond "%{REQUEST_FILENAME}\.gz" -s
    RewriteRule "^(.*)\.(css|js)"         "$1\.$2\.gz" [QSA]

    # Serve correct content types, and prevent mod_deflate double gzip.
    RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
    RewriteRule "\.js\.gz$"  "-" [T=text/javascript,E=no-gzip:1]


    <FilesMatch "(\.js\.gz|\.css\.gz)$">
      # Serve correct encoding type.
      Header append Content-Encoding gzip

      # Force proxies to cache gzipped &
      # non-gzipped css/js files separately.
      Header append Vary Accept-Encoding
    </FilesMatch>
</IfModule>
最佳

DeflateBufferSize 指令

描述:zlib一次压缩片段大小
句法:DeflateBufferSize value
默认:DeflateBufferSize 8096
内容:服务器配置,虚拟主机
状态:延期
模块:mod_deflate

DeflateBufferSize指令指定zlib一次压缩的片段的大小(以字节为单位)。如果压缩后的响应大小大于此指令指定的大小,则httpd将切换为分块编码(HTTP标头Transfer-Encoding设置为Chunked),其副作用是不设置任何Content-LengthHTTP标头。当httpd在反向缓存代理后面工作时,或者当httpd配置有mod_cache和时,这尤其重要 ,mod_cache_disk因为没有任何Content-Length标头的HTTP响应可能不会被缓存。

最佳

DeflateCompressionLevel 指令

描述:我们对输出应用多少压缩
句法:DeflateCompressionLevel value
默认:Zlib's default
内容:服务器配置,虚拟主机
状态:延期
模块:mod_deflate

DeflateCompressionLevel指令指定应使用的压缩级别,该值越高,压缩效果越好,但是实现该压缩需要更多的CPU时间。

该值必须介于1(较少压缩)和9(较大压缩)之间。

最佳

DeflateFilterNote 指令

描述:将压缩率放在记录中的注释中
句法:DeflateFilterNote [type] notename
内容:服务器配置,虚拟主机
状态:延期
模块:mod_deflate

DeflateFilterNote指令指定有关压缩率的注释应附加到请求中。注释的名称是为指令指定的值。通过将值添加到访问日志中,可以将该注释用于统计目的。

DeflateFilterNote ratio

LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
CustomLog "logs/deflate_log" deflate

如果要从日志中提取更准确的值,则可以使用type参数指定作为日志记录留下的数据类型。类型可以是以下之一:

Input
将过滤器输入流的字节数存储在注释中。
Output
将过滤器输出流的字节数存储在注释中。
Ratio
将压缩比(output/input * 100)存储在注释中。如果省略type参数,则这是默认设置。

因此,您可以这样记录它:

准确记录

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog "logs/deflate_log" deflate

也可以看看

最佳

DeflateInflateLimitRequestBody 指令

描述:膨胀的请求主体的最大大小
句法:DeflateInflateLimitRequestBody value
默认:None, but LimitRequestBody applies after deflation
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_deflate
兼容性:2.4.10及更高版本

DeflateInflateLimitRequestBody指令指定的充气请求主体的最大大小。如果未设置,则将其 LimitRequestBody应用于充气体。

最佳

DeflateInflateRatioBurst 指令

描述:可以超过请求主体的通货膨胀率的最大次数
句法:DeflateInflateRatioBurst value
默认:DeflateInflateRatioBurst 3
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_deflate
兼容性:2.4.10及更高版本

DeflateInflateRatioBurst指令指定了DeflateInflateRatioLimit在终止请求之前可以通过的最大次数 。

最佳

DeflateInflateRatioLimit 指令

描述:请求机构的最大通胀率
句法:DeflateInflateRatioLimit value
默认:DeflateInflateRatioLimit 200
内容:服务器配置,虚拟主机,目录,.htaccess
状态:延期
模块:mod_deflate
兼容性:2.4.10及更高版本

DeflateInflateRatioLimit指令指定膨胀的请求主体的压缩大小与膨胀大小的最大比率。在流式处理正文时检查此比率,如果超过 DeflateInflateRatioBurst 多次,则请求将被终止。

最佳

DeflateMemLevel 指令

描述:zlib应该使用多少内存进行压缩
句法:DeflateMemLevel value
默认:DeflateMemLevel 9
内容:服务器配置,虚拟主机
状态:延期
模块:mod_deflate

DeflateMemLevel指令指定zlib应使用多少内存进行压缩(介于1到9之间的值)。

最佳

DeflateWindowSize 指令

描述:Zlib压缩窗口大小
句法:DeflateWindowSize value
默认:DeflateWindowSize 15
内容:服务器配置,虚拟主机
状态:延期
模块:mod_deflate

DeflateWindowSize指令指定zlib压缩窗口的大小(介于1到15之间的值)。通常,窗口大小越大,可以预期的压缩率就越高。

可用语言: zh  |  fr  |  ja  |  KO 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。