描述: | 在将内容交付给客户端之前,先通过Brotli对其进行压缩 |
---|---|
状态: | 延期 |
模块标识符: | brotli_module |
源文件: | mod_brotli.c |
兼容性: | 在版本2.4.26和更高版本中可用。 |
该mod_brotli
模块提供BROTLI_COMPRESS
输出过滤器,该过滤器允许使用brotli压缩格式对服务器的输出进行压缩,然后再通过网络将其发送到客户端。该模块使用位于https://github.com/google/brotli的Brotli库
。
当TLS连接传输压缩数据时,某些Web应用程序容易受到信息泄露攻击。有关更多信息,请查看“ BREACH”攻击家族的详细信息。
这是压缩常见的基于文本的内容类型的简单配置。
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript
当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之后总是插入。它从不涉及内部子请求。
该mod_brotli
模块发送Vary:
Accept-Encoding
HTTP响应标头,以警告代理缓存的响应应仅发送给发送适当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>
描述: | 压缩期间如何修改传出的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 value |
默认: | (automatic) |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_brotli |
该BrotliCompressionMaxInputBlock
指令指定最大输入块大小在16到24之间,但要注意的是,更大的块大小需要更多的内存。
描述: | 压缩质量 |
---|---|
句法: | BrotliCompressionQuality value |
默认: | BrotliCompressionQuality 5 |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_brotli |
该BrotliCompressionQuality
指令指定压缩质量(0和11之间的值)。质量值越高,压缩效果越好,但压缩速度也较慢。
描述: | Brotli滑动压缩窗口大小 |
---|---|
句法: | BrotliCompressionWindow value |
默认: | BrotliCompressionWindow 18 |
内容: | 服务器配置,虚拟主机 |
状态: | 延期 |
模块: | mod_brotli |
该BrotliCompressionWindow
指令指定brotli滑动压缩窗口的大小(介于10和24之间的值)。较大的窗口大小可以提高压缩质量,但需要更多的内存。
描述: | 将压缩率放在记录中的注释中 |
---|---|
句法: | 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