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

Apache模块mod_brotli

描述:在将内容交付给客户端之前,先通过Brotli对其进行压缩
状态:延期
模块标识符:brotli_module
源文件:mod_brotli.c
兼容性:在版本2.4.26和更高版本中可用。

摘要

mod_brotli模块提供BROTLI_COMPRESS输出过滤器,该过滤器允许使用brotli压缩格式对服务器的输出进行压缩,然后再通过网络将其发送到客户端。该模块使用位于https://github.com/google/brotli的Brotli库 。

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

样本配置

压缩和TLS

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

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

仅压缩几种类型

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

启用压缩

压缩和TLS

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

输出压缩

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

SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli

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

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

注意

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

注意

有一个环境变量no-brotli(通过via设置)SetEnv,即使客户端支持,也将禁用特定请求的brotli压缩。
最佳

处理代理服务器

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

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

Header append Vary User-Agent

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

Header set Vary *
最佳

提供预压缩的内容

由于mod_brotli每次发出请求时都会重新压缩内容,因此可以通过预压缩内容并告诉mod_brotli无需重新压缩即可提供内容,从而获得一些性能优势。可以使用类似以下的配置来完成此操作:

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

    # Serve brotli compressed JS files if they exist
    # and the client accepts brotli.
    RewriteCond "%{HTTP:Accept-encoding}" "br"
    RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
    RewriteRule "^(.*)\.js"               "$1\.js\.br" [QSA]


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


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

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

BrotliAlterETag 指令

描述:压缩期间如何修改传出的ETag标头
句法:BrotliAlterETag AddSuffix|NoChange|Remove
默认:BrotliAlterETag AddSuffix
内容:服务器配置,虚拟主机
状态:延期
模块:mod_brotli

BrotliAlterETag指令指定在压缩响应时应如何更改ETag hader。

添加后缀

将压缩方法附加到ETag的末尾,使压缩和未压缩的表示形式具有唯一的ETag。在另一个动态压缩模块mod_deflate中,这是自2.4.0开始的默认设置。该设置防止将“ HTTP未修改”(304)响应提供给对压缩内容的条件请求。

没变

不要在压缩响应上更改ETag。在另一个动态压缩模块mod_deflate中,这是2.4.0之前的默认设置。此设置不满足HTTP / 1.1属性,即同一资源的所有表示形式都具有唯一的ETag。

去掉

从压缩响应中删除ETag标头。这样可以避免某些条件请求,但可以避免上述选项的缺点。

最佳

BrotliCompressionMaxInputBlock 指令

描述:最大输入块大小
句法:BrotliCompressionMaxInputBlock value
默认:(automatic)
内容:服务器配置,虚拟主机
状态:延期
模块:mod_brotli

BrotliCompressionMaxInputBlock指令指定最大输入块大小在16到24之间,但要注意的是,更大的块大小需要更多的内存。

最佳

BrotliCompressionQuality 指令

描述:压缩质量
句法:BrotliCompressionQuality value
默认:BrotliCompressionQuality 5
内容:服务器配置,虚拟主机
状态:延期
模块:mod_brotli

BrotliCompressionQuality指令指定压缩质量(0和11之间的值)。质量值越高,压缩效果越好,但压缩速度也较慢。

最佳

BrotliCompressionWindow 指令

描述:Brotli滑动压缩窗口大小
句法:BrotliCompressionWindow value
默认:BrotliCompressionWindow 18
内容:服务器配置,虚拟主机
状态:延期
模块:mod_brotli

BrotliCompressionWindow指令指定brotli滑动压缩窗口的大小(介于10和24之间的值)。较大的窗口大小可以提高压缩质量,但需要更多的内存。

最佳

BrotliFilterNote 指令

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

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

BrotliFilterNote ratio

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

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

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

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

准确记录

BrotliFilterNote Input instream
BrotliFilterNote Output outstream
BrotliFilterNote Ratio ratio

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

也可以看看

可用语言: zh  |  fr 

最佳

注释

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