内容提要
OpenResty 1.31.8.1 正式发布,提供源码及多发行版二进制包。核心升级包括 Nginx 1.31.8、OpenSSL 3.5.9、PCRE2 10.49 和 LuaJIT 新版。lua-nginx-module 修复证书压缩、重试回绕、连接复用及多处内存安全问题;stream 模块修复 use-after-free;lua-resty-core 新增证书压缩接口;Redis、OpenSSL 等库亦有更新与修复。
延伸解读
证书压缩与握手修复的实用价值
本次更新在 TLS 层面有两处值得注意:lua-nginx-module 支持压缩通过 ssl_certificate_by_lua* 动态设置的证书,lua-resty-core 也新增了 ngx.ssl.compress_certs() 接口,便于在 Lua 中主动压缩证书链。同时修复了 sslhandshake 握手立即完成时丢失证书校验错误的问题,避免校验失败被静默忽略。对于依赖动态证书和严格校验的场景,这些改动提升了可控性与安全性。
连接复用与重试逻辑的稳定性改进
lua-nginx-module 修复了 balancer_by_lua* 重试计数回绕导致的无限重试问题,以及使用 proxy_bind 时 balancer keepalive 连接无法复用的问题。前者关系到故障时的请求收敛,后者影响后端连接池效率。若线上使用自定义负载均衡或绑定源地址,升级后可减少异常重试和连接重建带来的开销,建议在测试环境验证相关配置。
内存安全与 GC 相关修复需重点关注
发布说明列出多处内存安全问题:lua-nginx-module 修复 receiveuntil 迭代器、客户端 CA 名称列表、worker thread 等相关问题;stream-lua-nginx-module 修复 receiveuntil 迭代器被 GC 后的 use-after-free,以及终止 uthread 时未清理子协程操作。这些属于潜在崩溃或未定义行为风险,对长期运行和高并发服务尤为重要,升级时应优先评估。
依赖库与工具链的同步升级
除核心组件外,lua-resty-redis 的 connect() 新增 db、password、username、tcp_keepalive 选项,hmget() 支持传入 table;lua-resty-openssl 支持 OpenSSL 4.0 并新增后量子密钥操作;resty-cli 新增 --no-clean 选项。这些变化扩展了配置便利性和调试手段,但涉及接口行为调整,使用相关库的项目应核对调用方式后再升级。
Q&A
OpenResty 1.31.8.1 提供了哪些平台的安装包?
本次发布提供可移植的源代码发布版,以及 Ubuntu、Debian、Fedora、CentOS、RHEL、OpenSUSE、Amazon Linux 等 Linux 发行版的预编译二进制包。
OpenResty 1.31.8.1 的核心组件都升级到了哪些版本?
Nginx 从 1.31.1 升级至 1.31.8,OpenSSL 从 3.5.6 升级至 3.5.9,PCRE2 从 10.47 升级至 10.49,LuaJIT 升级至 v2.1-20261023。
lua-nginx-module 在这个版本修复了哪些重要问题?
支持压缩通过 ssl_certificate_by_lua* 设置的证书;修复 balancer_by_lua* 重试计数回绕导致的无限重试;修复使用 proxy_bind 时 balancer keepalive 连接无法复用;修复 ngx.flush() 缓冲区仍在队列中时被回收;修复 lua_code_cache off 时 server_rewrite_by_lua* 误用全局 VM;修复 sslhandshake 握手立即完成时丢失证书校验错误;修复 receiveuntil 迭代器、客户端 CA 名称列表、worker thread 等相关的多个内存安全问题。
stream-lua-nginx-module 在 1.31.8.1 中修复了哪些问题?
修复 receiveuntil 迭代器被 GC 后的 use-after-free 问题;修复终止 uthread 时未清理子协程操作的问题;修复错误结束请求前未输出已缓冲数据的问题。
lua-resty-core 新增了什么接口?
新增 ngx.ssl.compress_certs() 接口,用于证书压缩;同时修复了 stream cosocket getsslctx() 绑定到错误 FFI 符号的问题,以及 sslhandshake 错误处理及多个 FFI 正确性问题。
LuaJIT 在这个版本有哪些值得关注的改进?
从 v3.0 回移植部分语法扩展,允许在任意位置使用空语句(分号);支持 JIT 编译 unpack(),优化 string.sub/string.byte 的单字符常见场景;在 x64、ARM64、PPC、s390x、macOS、iOS、Windows 等平台有多项修复与优化;FFI 有多项 ABI 与调用约定修复。
lua-resty-redis 和 lua-resty-openssl 分别有哪些更新?
lua-resty-redis 升级至 v0.34:connect() 新增 db、password、username、tcp_keepalive 选项;hmget() 支持传入 table;修复事务状态及模块命令参数相关问题。lua-resty-openssl 升级至 v1.9.0:支持 OpenSSL 4.0;新增后量子密钥操作支持。