操作
版本信息¶
- 版本: 1.4.65
- 上一版本: 1.4.64
- 分支: 1.4
- 状态: 稳定版
- 发布目的: 错误修复
- 发布经理: gstrauss
- 发布日期: 2022-06-07
1.4.64版的重要变更¶
基于 HTTP/2 的 WebSockets, 错误修复
亮点¶
- 基于 HTTP/2 的 WebSockets
RFC 8441 使用 HTTP/2 引导 WebSockets - HTTP/2 PRIORITY_UPDATE
RFC 9218 HTTP 可扩展优先级方案 - lighttpd.conf 中的前缀/后缀条件
- mod_webdav 安全的部分 PUT
webdav.opts += ("partial-put-copy-modify" => "enable") - mod_accesslog 选项: accesslog.escaping = "json"
- mod_deflate libdeflate 构建选项
- 通过 HTTP/2 加快请求体上传速度
行为变更¶
- 将默认的 server.max-keep-alive-requests = 1000 调整为
以适应不断增长的 HTTP/2 和 web2/web3 应用使用
(之前的默认值为 100) - mod_status HTML 现在输出中包含 HTTP/2 控制流 ID 0
其中包含 HTTP/2 连接的总计数
(这些行可以通过 URL '*' 识别,是 "PRI *" 前缀的一部分)
替代方案: https://wiki.lighttpd.net/ModMagnetExamples#lua-mod_status - MIME 类型 application/javascript 被转换为 text/javascript (RFC 9239)
未来计划的行为变更¶
- TLS 模块将默认使用更强大、更现代的加密算法,并且
将默认允许客户端优先选择加密算法。
允许客户端优先选择加密算法是安全的,配合
使用支持 PFS 的现代加密算法的限制,并且
对没有 AES 硬件加速的移动用户来说更好。
旧版加密算法仍可通过 lighttpd.conf 中的
`ssl.openssl.ssl-conf-cmd` 进行配置,只要底层 TLS 库支持这些加密算法。 https://wiki.lighttpd.net/Docs_SSL
底层的 TLS 库。https://wiki.lighttpd.net/Docs_SSL
新默认值
"CipherString" => "EECDH+AESGCM:AES256+EECDH:CHACHA20:!SHA1:!SHA256:!SHA384",
"Options" => "-ServerPreference"
旧默认值
"CipherString" => "HIGH",
"Options" => "ServerPreference"
- 已弃用的 TLS 选项将被移除。
- ssl.honor-cipher-order
- ssl.dh-file
- ssl.ec-curve
- ssl.disable-client-renegotiation
- ssl.use-sslv2
- ssl.use-sslv3
请参阅 https://wiki.lighttpd.net/Docs_SSL 了解使用
`ssl.openssl.ssl-conf-cmd` 进行替换,但更推荐使用 lighttpd 默认值。
- 继续逐步弃用 "迷你应用" lighttpd 模块
因为 mod_magnet lua 实现更好、更灵活。
如果您使用这些模块,请在 lighttpd 论坛上发布反馈。
论坛: https://redmine.lighttpd.ac.cn/projects/lighttpd/boards
- 已弃用: mod_evasive 将被移除。
mod_evasive 可以通过 mod_magnet 和几行 lua 代码替换。
替代方案: https://wiki.lighttpd.net/ModMagnetExamples#lua-mod_evasive
https://wiki.lighttpd.net/AbsoLUAtion#Fight-DDoS
https://wiki.lighttpd.net/AbsoLUAtion#Mod_Security
- 已弃用: mod_secdownload 将被移除。
mod_secdownload 可以通过 mod_magnet 和几行 lua 代码替换。
替代方案: https://wiki.lighttpd.net/ModMagnetExamples#lua-mod_secdownload
mod_secdownload 历史上使用不安全的 MD5,尽管 SHA1、SHA256 可用。
- 已弃用: mod_uploadprogress 将被移除。
mod_uploadprogress 可以通过 mod_magnet 和几行 lua 代码替换。
替代方案: https://wiki.lighttpd.net/ModMagnetExamples#lua-mod_uploadprogress
- 已弃用: mod_usertrack 将被移除。
mod_usertrack 可以通过 mod_magnet 和几行 lua 代码替换。
替代方案: https://wiki.lighttpd.net/ModMagnetExamples#lua-mod_usertrack
mod_usertrack 历史上使用不安全的 MD5。
下载¶
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.tar.gz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.tar.gz.asc
- SHA256:
396bdbe28e77cf68ffbc914e0280e4f3c6b42574277ccb7f776d572fdddea6d0
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.tar.xz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.tar.xz.asc
- SHA256:
bf0fa68a629fbc404023a912b377e70049331d6797bcbb4b3e8df4c3b42328be
- SHA256 校验和: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.sha256sum
- SHA512 校验和: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.65.sha512sum
1.4.64版以来的变更¶
- [构建] meson: 修复变量名中的拼写错误
- [构建] autoconf: 报告是否使用 zstd 构建
- [构建] meson -Dlua_version=... 用于指定 lua 版本
- [核心] 避免在 MacOS <10.12 上使用 CCRandomGenerateBytes (修复 #3140)
- [核心] 与 CCRandomGenerateBytes 一起使用不同的变量名 (修复 #3141)
- [核心] 使用 SHELL 或 /bin/sh 解析 conf 命令
- [核心] 修复 openssl 3.0 的 HMAC
- [mod_webdav] 在 OSX <10.12 上不使用 COPYFILE_CLONE_FORCE (修复 #3142)
- [mod_deflate] 修复在 If-None-Match 的情况下返回 304 (修复 #3143)
- [核心] Illumos epoll 与 lighttpd 实现不兼容
- [核心] 允许 HTTP/1.0 使用 Range 的功能标志
- [mod_mbedtls] 为 mbedtls 3.2.0+ 设置 usekeysize
- [mod_deflate] 收集 mmap 代码
- [mod_deflate] 使用 libdeflate 和 mmap 的原型
- [mod_deflate] --with-libdeflate 以使用 libdeflate
- [mod_deflate] 将输入字节标记为 const
- [核心] sys-setjmp.[ch]
- [mod_magnet] 在 setjmp 前检查 lighty.result.content
- [核心] sys-time.h 中包含守护的一致性
- [核心] network_write_file_chunk_remap 独立函数
- [多模块] 使用新的 sys_setjmp_eval3() 接口
- [多模块] chunk.c 对 0 长度块的严格检查
- [多模块] struct chunk 和 mmap 的共享代码
- [mod_deflate] 如果可用,使用 pread
- [mod_deflate] 改进文件块压缩循环
- [核心] 启动时为 h2 响应头准备 server_tag
- [mod_magnet] 除非必要,否则延迟 req_env 初始化
- [mod_magnet] 附加内容错误后重置
- [mod_magnet] lua_tointegerx() 避免引发错误
- [mod_mbedtls] 使用较新的 mbedtls 3.2.0+ 接口
- [mod_magnet] 调整热路径以进行更多内联
- [mod_magnet] 收集用于 magnet lua_State 初始化的 chk
- [mod_magnet] 使用 lua_getfield() 返回的类型
- [核心] chunk_file_pread() 用于封装 pread()
- [核心] 如果强制使用 HTTP/1.0 响应,则禁用 keep-alive
- [mod_magnet] 使用 lua_getextraspace() 存储 r
- [核心] 如果可用,回退到 getauxval(AT_RANDOM)
- [mod_magnet] 在堆栈上保留消息处理程序
- [文档] 更新外部链接
- [mod_magnet] 传递 lighty 表索引,延迟弹出
- [mod_magnet] 清除并重用 script-env 表
- [mod_magnet] 重新加载脚本时清除堆栈
- [mod_magnet] 在接口中使用 lua_isnoneornil()
- [mod_magnet] 修复 lighty.c.cookie_tokens()
- [mod_magnet] 修复 lighty.c.urldec_query()
- [mod_magnet] 移除重复的 NULL 检查
- [mod_magnet] 调整 magnet_lighty_result_get()
- [mod_magnet] magnet_tmpbuf_acquire(),release()
- [mod_magnet] lighty.c.quotedenc(),dec() 函数
- [mod_magnet] 修复 header,content 旧版表清除问题
- [mod_cgi] cgi.local-redir 通过 fnptr 重置请求
- [核心] 将 plugins_*() 函数隔离到主服务器
- [mod_wolfssl] wolfssl v5.0.0 定义 DH_set0_pqg()
- [mod_auth] 在 require 配置中保存大小写差异
- [mod_magnet] magnet_push_quoted_string 共享代码
- [mod_magnet] lighty.c.header_tokens 便捷函数
- [核心] accept() 后填充 un.sun_path (修复 #3147)
- [mod_extforward] 调整 HTTP/2 的信任检查
- [mod_proxy] 调整旧版 X-* 头的处理
- [核心] 允许环境变量为空值 (修复回归)
- [TLS] debug.log-ssl-noise 配置类型一致性
- [mod_magnet] 允许通过 nil 移除 req_env 元素
- [核心] 针对非常旧的 gcc,glibc 的编译器变通方法
- [mod_mbedtls] 使用较新的 mbedtls 3.2.0+ 接口
- [mod_ssi] 检查 http_chunk_transfer_cqlen 是否出错
- [核心] chunkqueue_steal() 处理意外的 0 长度
- [核心] 在 h2 初始化时丢弃 REFUSED_STREAM 的 DATA
- [多模块] 基于 HTTP/2 的 WebSockets (修复 #3151)
- [多模块] 立即连接后端进行流传输
- [核心] 在检查连接前确保 socket 已就绪
- [核心] 减少 Upgrade 后端连接的跟踪
- [核心] 调整 TLS 连接上使用 TCP_CORK 的时机
- [mod_cgi] 如果可能 Upgrade,则禁用输入优化
- [mod_cgi] 如果 Upgrade,立即启动 CGI
- [mod_wolfssl] wolfssl v5.0.0 添加 ASN1_TIME_diff()
- [mod_openssl] libressl v3.5.0 添加 ASN1_TIME_diff
- [TLS] 如果叶证书读取不活跃/已过期则发出警告
- [核心] 更严格符合即将到来的 HTTP/2 修订版
- [构建] -D_DEFAULT_SOURCE 在构建中的一致性
- [mod_extforward] 支持带 "[]" 的额外 IPv6 语法
- [核心] cygwin 和 lmingw 的构建修复
- [核心] 提前短路解析 h2 尾部
- [核心] 重新格式化 h2.h 以实现更清晰的枚举添加
- [核心] 整合 log-state-handling 的跟踪
- [核心] request_config 位掩码用于更小的结构体
- [核心] 前缀 (=^), 后缀 (=$) 配置条件 (修复 #3153)
- [核心] 收紧配置解析循环
- [核心] 将简单配置条件正则表达式转换为前缀/后缀
- [测试] 在不使用 pcre 构建时也能运行测试
- [核心] 允许不使用 pcre 的重定向、重写扩展替换
- [mod_sockproxy] 重置 http 版本,避免罕见崩溃 (修复 #3152)
- [核心] HTTP/2 PRIORITY_UPDATE 帧 (实验性)
- [核心] 发送 HTTP/2 SETTINGS_NO_RFC7540_PRIORITIES
- [核心] 更严格检查 HTTP/2 GOAWAY 帧大小
- [mod_mbedtls] 使用较新的 mbedtls 3.2.0+ 接口
- [mod_webdav] 选择通过复制/重命名进行部分 PUT
- [核心] 静默编译器警告
- [多模块] 识别 HTTP QUERY 方法
- [多模块] 限制 socket 配置选项的范围
- [核心] 修复从字符串读取大整数时的配置拼写错误
- [核心] h2 优先级排序:紧急性,递增,然后流 ID
- [核心] 随 .css, .js 重新优先级发送 Priority 响应头
- [多模块] 重置 http 版本,避免罕见崩溃 (修复 #3152)
- [核心] 延迟响应 http 认证的无效凭据
- [核心] 仅当 con->h2 时执行 connection_state_machine_h2
- [核心] 默认 server.max-keep-alive-requests 1000
- [mod_magnet] 在函数的第一个上值中设置脚本环境变量
- [mod_magnet] 将 lighty.r 重写为 userdata 表
- [mod_status] 使用 con->h2 而非 r->http_version
- [mod_setenv] 清理用户提供的粗糙头
- [核心] 移除 plugin.h 中重复的函数声明
- [mod_status] 修复 HTTP/2 写入字节计数问题
- [mod_magnet] 在 Unix 域上没有本地服务器端口
- [mod_extforward] Unix 域套接字的严格检查
- [核心] 抽象套接字的支持草图
- [mod_magnet] magnet_plugin_stats_table() 函数
- [mod_magnet] magnet_script_setup_global_state() 函数
- [mod_magnet] 带有新函数的 lighty.server.* 表
- [mod_accesslog] 不重复计算 %I 中的头长度
- [mod_magnet] 减少 magnet_env_get_id() 扫描
- [mod_magnet] 收紧 magnet_env_get_buffer_by_id()
- [mod_status] r->state 字符串的可重用代码
- [核心] r->state 字符串的可重用代码
- [mod_magnet] 向 lua 脚本公开 r->state
- [mod_magnet] 收紧 magnet_env_set()
- [mod_magnet] lighty.r.req_item[] 访问器
- [mod_magnet] 向 lua 脚本公开 r->keep_alive
- [mod_magnet] lighty.c.hrtime 高精度时间
- [mod_magnet] lighty.r.resp_body.get
- [mod_magnet] 弃用 r.req_attr["response.*]
- [mod_magnet] uri_path_raw 的独立函数
- [mod_magnet] lighty.c.stat 高精度时间
- [mod_magnet] 格式化多行错误回溯
- [mod_magnet] 调整 p->conf.stage 检查
- [mod_magnet] 进一步隔离旧版 API 结果表
- [核心] buffer_append_char() 便捷函数
- [mod_accesslog] accesslog.escaping = "json"
- [多模块] 使用 buffer_append_char()
- [mod_accesslog] 从 %{}t 中移除开始/结束标签
- [核心] 修复 configparser_simplify_regex() 注释
- [多模块] 简化 bytes_in/bytes_out 计数
- [mod_accesslog] 重新排序 switch() 中的字段
- [核心] 移除未使用的 srv->con_* 计数器
- [mod_magnet] 对 r->server_name 的只读访问
- [核心] buffer_append_bs_escaped()
- [核心] buffer_append_string_c_escaped ASCII 优化
- [mod_magnet] 退格符转义编码/解码
- [mod_status] 显示带有请求的 HTTP/2 控制流
- [多模块] 对 Content-Type 使用首选语法
- [文档] 重新生成 doc/config/conf.d/mime.conf
- [多模块] 将 status_counter 重命名为 plugin_stats
- [核心] 功能标志 server.metrics-high-precision
- [mod_magnet] 消除 coverity 误报
- [mod_wolfssl] 针对 OpenWRT 的编译修复
- [mod_webdav] 在不存在时使用 If-None-Match: *
- [mod_magnet] r.req_body .collect .get .set .add
- [mod_cgi] 修复故障错误处理程序的检测 (修复 #3157)
- [核心] "url-invalid-utf8-reject" 规范化选项
- [mod_magnet] 如果是 modsec3,则跳过请求体收集警告
- [构建] 更新描述以移除旧的 lua 版本
- [核心] 如果 context->basedir 为空,则使用当前目录
- [多模块] application/javascript text/javascript
- [核心] 优雅重启后重置内部标志
- [TLS] 从全局范围继承 ssl.engine
- [核心] 在 SIGUSR1 后避免 server.use-ipv6 警告
- [mod_webdav] 集合上的 PROPFIND 备用处理
- [mod_mbedtls] 修复 crt 链构建逻辑
- [核心] h2 SETTINGS_INITIAL_WINDOW_SIZE 64k (修复 #3089)
- [核心] 将会话窗口大小增加到 256k
- [核心] h2: 避免发送小的 WINDOW_UPDATE 帧
- [核心] h2: 避免发送微小的 DATA 帧
- [核心] 使用 Priority 头更新缓存表
- [测试] http_header.c 和 http_kv.c 的测试存根