mod_deflate¶
mod_deflate(自 lighttpd 1.4.42 起)启用响应的输出压缩。(内容编码)
输出压缩减少了网络负载,并能提高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、修改时间和大小生成(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 进行内容协商