项目

通用

个人资料

操作

mod_deflate

mod_deflate(自 lighttpd 1.4.42 起)可启用响应输出压缩。(Content-Encoding)

输出压缩可以减少网络负载,并提高Web服务器的整体吞吐量。所有主流HTTP客户端都通过在Accept-Encoding头部中声明来支持压缩。这用于协商最合适的压缩方法。我们支持 deflate、gzip、bzip2、brotli(自 1.4.56 起)和 zstd(自 1.4.59 起)。

deflate (RFC1950, RFC1951) 和 gzip (RFC1952) 依赖于 zlib。
brotli (RFC7932) 在大多数主流浏览器中受到支持。
zstd (RFC8478)
bzip2 仅受 lynx 和其他一些控制台文本浏览器支持,已不再推荐;应优先使用 brotli 或 gzip。

自 lighttpd 1.4.56 起,mod_deflate 取代并替换了 mod_compress。mod_deflate 可以压缩静态和动态响应,而 mod_compress 只能压缩静态文件。

模块选项:

#deflate.mimetypes = ("text/")       # prefix matches all text/* Content-Type responses
deflate.mimetypes = ("text/html", "text/plain", "text/css", "text/javascript", "text/xml")
deflate.allowed-encodings = ( "br", "gzip", "deflate" ) # "bzip2" and "zstd" also supported

## optional

deflate.cache-dir = "/path/to/compress/cache" 

#deflate.max-compress-size = 131072   # measured in kilobytes, so 131072 indicates 128 MB
#deflate.min-compress-size = 256      # measured in bytes
#deflate.max-loadavg = "3.50" 

#deflate.params = (                   # since lighttpd 1.4.60 (recommended: leave defaults unless you test your changes for positive effect)
#  "BROTLI_PARAM_QUALITY"    => 4,    #  0..11 (default is  4 (not 11 (BROTLI_DEFAULT_QUALITY) due to time costs of BROTLI_DEFAULT_QUALITY))
#  "BROTLI_PARAM_LGWIN"      => 22,   # 10..24 (default is 22 (BROTLI_DEFAULT_WINDOW))
#  "BROTLI_PARAM_MODE"       => 0,    #  0..2  (default is  0 (BROTLI_MODE_GENERIC)) (1: BROTLI_MODE_TEXT) (2: BROTLI_MODE_FONT)
#  "ZSTD_c_compressionLevel" => 3,    # -3..22 (default is  3 (ZSTD_CLEVEL_DEFAULT)
#  "ZSTD_c_strategy"         => 0,    #  1..9  (default is  0 (use zstd default strategy))
#  "ZSTD_c_windowLog"        => 0,    # 10..23 (default is  0 (use zstd default windowLog))
#  "gzip.level"              => 6,    #  1..9  (default is  6 (Z_DEFAULT_COMPRESSION))
#  "gzip.windowBits"         => 6,    #  9..15 (default is 15 (MAX_WBITS))
#  "gzip.memLevel"           => 8,    #  1..9  (default is  8 )
#  "gzip.strategy"           => 0,    #  0..4  (default is  0 (Z_DEFAULT_STRATEGY)) (1: Z_FILTERED 2: Z_HUFFMAN_ONLY 3: Z_RLE 4: Z_FIXED)
#  "bzip2.blockSize100k"     => 9,    #  1..9  (default is  9 (block size 900k))
#)

#deflate.compression-level = 9        # deprecated; overloaded; use deflate.params (since 1.4.60) for encoder-specific values)
#deflate.work-block-size = 2048       # deprecated; gzip-specific; currently has no effect (unused) in code
#deflate.output-buffer-size = 8192    # deprecated; gzip- and bzip2-specific; currently has little effect in code (due to mod_deflate not streaming partial responses)

deflate.cache-dir(自 1.4.56 起)是用于存储压缩文件缓存的位置。(更多详情请参阅下面的“缓存重新验证”。)

deflate.allowed-encodings 列出了服务器将选择的编码。自 lighttpd 1.4.60 起,此列表的顺序将被保留,并且服务器将从此列表中选择第一个与客户端请求 Accept 头部中的值匹配的编码。

deflate.max-compress-size 是将被压缩的最大响应大小。
deflate.min-compress-size 是将被压缩的最小响应大小。
deflate.max-loadavg 是绕过压缩前的最大系统平均负载(自 1.4.43 起)

deflate.params 配置编码器特定的可调参数。强烈建议省略 deflate.params 并使用 lighttpd 默认值,除非您已测试更改并确认其有积极效果。(供参考:参数命名直接映射到编码器库C头文件中的名称)

deflate.compression-level(已弃用)是底层压缩器的压缩级别或质量调整。(已弃用;请使用 deflate.params(自 1.4.60 起)获取编码器特定值)
(更多信息:man gzip (1..9);man bzip2 (1..9);man -s 3brotli encode.h (0..11))

缓存重新验证

缓存根据 URL 路径和 ETag 响应头的组合进行维护和更新。

对于由 mod_staticfile 提供的静态文件,ETag 响应头默认由文件 inode、mtime 和大小生成(ETag 数据源)。

lighttpd 不会自动清除旧的或过期的缓存条目。外部进程,例如定期 cron 作业,可以删除过期文件。例如,要删除超过 10 天的文件:find /path/to/deflate/cache -type f -mtime +10 | xargs -r rm

已知限制

mod_deflate 目前不支持分块传输压缩内容。这会影响非常大的动态响应,或者在块之间有长时间间隔分块发送的动态响应。如果在发送响应头时整个响应尚未准备好,mod_deflate 将不会压缩响应。(例如,来自后端的动态响应且 server.stream-response-body 设置为 > 0)虽然 mod_deflate 不处理这种情况,但生成流式响应的后端能够自行应用适当的 Content-Encoding(而不是由 mod_deflate 处理)。

mod_deflate 的 deflate.cache-dir(如果设置)包含静态文件的缓存输出,但不会缓存动态响应,除非响应包含 ETag 响应头。(动态响应,如果符合条件,在发送到客户端之前仍由 mod_deflate 压缩。)如果您已禁用 ETag(static-file.etags = "false"),则相同的限制也适用于静态文件。

如果 mod_setenv 可能被用于强制设置“Content-Encoding”响应头,则 mod_deflate 必须在 server.modules 中列在 mod_setenv 之后。

内容协商

为了选择/协商文档根目录中预压缩的文件(例如,当请求 main.html 时选择 main.html.br 或 main.html.gz),请使用带自定义 Lua 代码的 mod_magnet 进行内容协商

gstrauss 更新于 大约 1 年 前 · 44 次修订