我们很高兴地宣布,基于 NGINX 和 LuaJIT 的 OpenResty Web 平台正式发布新版本 1.31.1.1。
可在此处下载该版本。
(可移植的)源代码发行包,以及面向 Ubuntu、Debian、Fedora、CentOS、RHEL、OpenSUSE、Amazon Linux 的预编译二进制 Linux 软件包,均可在下载页面获取。
版本亮点
Nginx 核心
- 由 nginx 1.29.2 升级到 1.31.1。
OpenSSL
lua-nginx-module 升级到 v0.10.31
- 新增:添加 ffi ngx_http_lua_ffi_socket_tcp_get_ssl_pointer() 和 ffi ngx_http_lua_ffi_socket_tcp_get_ssl_ctx()。感谢 lijunlong 提供的补丁。
- 新增:新增 API:tcpsock:getsslsession。感谢 lijunlong 提供的补丁。
- 新增:添加 ngx_http_lua_ffi_get_upstream_ssl_pointer。感谢 lijunlong 提供的补丁。
- 新增:添加 precontent_by_lua 指令。感谢 Hanada 提供的补丁。
- 新增:添加获取 server random 和 master key 的 API。感谢 xiangwei 提供的补丁。
- 新增:为 TCP 添加 socket 选项 keepintvl 和 keepcnt。感谢 lijunlong 提供的补丁。
- 新增:proxy_ssl_verify_by_lua* 指令。感谢 willmafh 提供的补丁。
- 新增:支持为 cosocket TLS 握手设置自定义的受信任 CA 存储。(#2495) 感谢 Walker Zhao 提供的补丁。
- 修复:在 nginx -T 中添加 dump。感谢 Y.Horie 提供的补丁。
- 修复:在 ngx_http_lua_pipe_proc_wait_cleanup 中清理 wait 定时器,以避免 QUIC 连接关闭时发生 SIGSEGV。感谢 Jun Ouyang 提供的补丁。
- 修复:修复与 freenginx 的兼容性问题。感谢 Y.Horie 提供的补丁。
- 修复:修正 config 中的拼写错误。感谢 xuruidong 提供的补丁。
- 修复:通过确保 old_cycle 被设置,避免 SSL 缓存中的空指针解引用。感谢 Jun Ouyang 提供的补丁。
- 修复:避免 worker 关闭期间事件定时器红黑树中的 SIGSEGV。感谢 Gabriel Clima 提供的补丁。
- 修复:在 QUIC 连接关闭路径中确保连接在内存池销毁前关闭,避免 ngx_http_lua_pipe 中的释放后使用(use-after-free)崩溃。感谢 Jun Ouyang 提供的补丁。
- 修复:在删除前检查协程引用,避免 uthread 崩溃。感谢 Jun Ouyang 提供的补丁。
- 变更:允许 ngx.header['WWW-Authenticate'] 使用 table 设置多个值。感谢 BotoX 提供的补丁。
- 优化:增加对 freenginx 的兼容。感谢 Sergey A. Osokin 提供的补丁。
- 优化:在 cosocket 的错误日志中添加上游服务器信息。感谢 lijunlong 提供的补丁。
- 测试:修复在 BoringSSL 环境下不稳定的测试。感谢 Jun Ouyang 提供的补丁。
- 测试:在 CI 中添加 dnsmasq 以避免不稳定的测试。感谢 Y.Horie 提供的补丁。
- 文档:修正 ngx.escape_uri 中未编码的字符。感谢 Y.Horie 提供的补丁。
- 文档:修正拼写错误。感谢 leslie 提供的补丁。
- 文档:修正拼写错误并删除不正确的描述。感谢 willmafh 提供的补丁。
- 文档:更新版权信息。感谢 lijunlong 提供的补丁。
- 文档:更新 ngx.req.http_version 和 ngx.req.raw_header 的可用上下文,加入 log_by_lua。感谢 kurt 提供的补丁。
stream-lua-nginx-module 升级到 v0.0.19
- 新增:添加 ffi API ngx_stream_lua_ffi_socket_tcp_getfd。感谢 lijunlong 提供的补丁。
- 新增:添加 ffi 函数 ngx_stream_lua_ffi_socket_tcp_get_ssl_pointer() 和 ngx_stream_lua_ffi_socket_tcp_get_ssl_ctx()。感谢 lijunlong 提供的补丁。
- 新增:新增 API:tcpsock:get_ssl_session。感谢 lijunlong 提供的补丁。
- 新增:添加 ngx_stream_lua_ffi_get_upstream_ssl_pointer。感谢 lijunlong 提供的补丁。
- 新增:为 UDP cosocket 绑定本地端口添加 reuseport 支持。感谢 lijunlong 提供的补丁。
- 新增:为 TCP 添加 socket 选项 keepintvl 和 keepcnt。感谢 lijunlong 提供的补丁。
- 新增:在下游 socket 上实现 serversslhandshake 方法。(#392) 感谢 Rob Mueller 提供的补丁。
- 新增:proxy_ssl_certificate_by_lua 指令。感谢 willmafh 提供的补丁。
- 新增:支持为 cosocket TLS 握手设置自定义的受信任 CA 存储。(#401) 感谢 Walker Zhao 提供的补丁。
- 优化:增加对 freenginx 的兼容。感谢 Sergey A. Osokin 提供的补丁。
- 优化:在 cosocket 的错误日志中添加上游服务器信息。感谢 lijunlong 提供的补丁。
- 修复:nginx 关闭定时器触发时未关闭 cosocket。感谢 lijunlong 提供的补丁。
- 修复:在删除前检查协程引用,避免 uthread 崩溃。感谢 Jun Ouyang 提供的补丁。
- 修复:消除 clang 警告。感谢 lijunlong 提供的补丁。
lua-resty-core 升级到 v0.1.34rc2
- 新增:添加获取 server random 和 master key 的 Lua API。感谢 mengxiangwei 提供的补丁。
- 新增:新增 API:tcpsock:getsslsession。感谢 lijunlong 提供的补丁。
- 新增:添加 precontent_by_lua 指令。感谢 Hanada 提供的补丁。
- 新增:为 TCP 添加 socket 选项 keepintvl 和 keepcnt。感谢 lijunlong 提供的补丁。
- 新增:添加 sock:getsslpointer() 和 sock:getsslctx()。感谢 lijunlong 提供的补丁。
- 新增:添加 ssl.get_upstream_ssl_pointer。感谢 lijunlong 提供的补丁。
- 新增:为 stream 子系统添加 tcpsock.getfd()。感谢 lijunlong 提供的补丁。
- 新增:添加 tcpsock:settrustedstore(),用于设置单次握手的受信任 CA。感谢 Walker Zhao 提供的补丁。
- 新增:proxy_ssl_certificate_by_lua 指令。感谢 willmafh 提供的补丁。
- 新增:为 stream 子系统支持 tcpsock:settrustedstore()。感谢 Walker Zhao 提供的补丁。
- 新增:更新 ngx-lua 和 stream-ngx-lua 的版本。感谢 lijunlong 提供的补丁。
- 优化:加载错误的 lua-nginx-module 时给出更详细的错误信息。感谢 lijunlong 提供的补丁。
- 修复:在不带 ssl 编译时无法加载 socket.lua。感谢 lijunlong 提供的补丁。
- 修复:修正拼写错误。感谢 lijunlong 提供的补丁。
- 文档:更新版权信息。感谢 lijunlong 提供的补丁。
- 风格:修正拼写错误。感谢 Chrono 提供的补丁。
luajit2 升级到 v2.1-20260415
- 添加 ffi.abi("dualnum")。感谢 Mike Pall 提供的补丁。
- 允许在跳转范围之外为支持代码进行 mcode 分配。感谢 Mike Pall 提供的补丁。
- ARM64:在工具链支持时启用非对齐访问。感谢 Mike Pall 提供的补丁。
- ARM64:修复对大于 2GB 跳转目标的反汇编。感谢 Mike Pall 提供的补丁。
- ARM64:修复对某些小于字长的 load/store 的反汇编。感谢 Mike Pall 提供的补丁。
- ARM64:对 ARM BTI 的更多修复。感谢 Mike Pall 提供的补丁。
- 避免因调用 VM hook 而干扰 trace 记录。感谢 Mike Pall 提供的补丁。
- 避免在内部 registry 键中使用次正规数(subnormal)。感谢 Mike Pall 提供的补丁。
- 回退 MSVC 下的 LJ_CONSTF 声明。感谢 Mike Pall 提供的补丁。
- bcsave.lua:添加 ppc64 和 ppc64le 的映射。感谢 Piotr Kubaj 提供的补丁。
- 修复:定义 LUA_USE_TRACE_LOGS 时编译失败。感谢 lijunlong 提供的补丁。
- DUALNUM:为 FORI slot 补上缺失的类型转换。感谢 Mike Pall 提供的补丁。
- DUALNUM:修复一元负号的窄化(narrowing)。感谢 Mike Pall 提供的补丁。
- DUALNUM:修复因上次改动而损坏的循环记录。感谢 Mike Pall 提供的补丁。
- DUALNUM:改进/修复一元负号的边界情况。感谢 Mike Pall 提供的补丁。
- ELF/Mach-O:为公共 API 函数强制使用默认可见性。感谢 Mike Pall 提供的补丁。
- FFI:避免悬空的 cts->L。感谢 Mike Pall 提供的补丁。
- FFI:修复 JIT 编译器中构造函数索引的解析。感谢 Mike Pall 提供的补丁。
- FFI:修复 64 位平台上的指针差值运算。感谢 Mike Pall 提供的补丁。
- FFI:缩小 packed 位域的容器。感谢 Mike Pall 提供的补丁。
- 修复编译器警告。感谢 Mike Pall 提供的补丁。
- 修复为 string.byte/sub/find 生成 IR 时的边界情况。感谢 Mike Pall 提供的补丁。
- 修复记录 string.byte/sub 时的边界情况。感谢 Mike Pall 提供的补丁。
- 修复栈调整大小时 G->jit_base 的重定位。感谢 Mike Pall 提供的补丁。
- 修复 minilua 中 bit.tohex 的未定义行为。感谢 Mike Pall 提供的补丁。
- 修复 MSVC 下的 LJ_CONSTF 声明。感谢 Mike Pall 提供的补丁。
- 修复 string.format 在有限精度浮点转换时的问题。感谢 Mike Pall 提供的补丁。
- 修复终结器(finalizer)的 VM 事件错误处理。感谢 Mike Pall 提供的补丁。
- 让 git 忽略 PDB 文件。感谢 Mike Pall 提供的补丁。
- 为 s390x 实现 double 到整数的转换。(#256) 感谢 Ilya Leoshkevich 提供的补丁。
- macOS:按 XCode 15.0 的要求调整 Mach-O 目标文件布局。感谢 Mike Pall 提供的补丁。
- MIPS64:避免 lj_vm_exit_interp 中的非对齐加载。感谢 Mike Pall 提供的补丁。
- PPC:修复软浮点的 lj_num2u64()。感谢 Mike Pall 提供的补丁。
- 避免 unpack() 中 sanitizer 的误报警告。感谢 Mike Pall 提供的补丁。
- 阻止记录步长为 -0 或包含 NaN 值的循环。感谢 Mike Pall 提供的补丁。
- 在记录函数头期间阻止快照清除。感谢 Mike Pall 提供的补丁。
- 移除浮点转换的编译标志,现已不再需要。感谢 Mike Pall 提供的补丁。
- 移除无意义的 GCC/MSVC const 函数属性。感谢 Mike Pall 提供的补丁。
- 在独立的 state 中运行 VM 事件和终结器。感谢 Mike Pall 提供的补丁。
- s390x:简化 ceil/floor 代码。(#246) 感谢 J. Neuschäfer 提供的补丁。
- 统一 Lua number 到 FFI 整数的转换。感谢 Mike Pall 提供的补丁。
- x64/!LJ_GC64:no-JIT 构建同样需要分配上限。感谢 Mike Pall 提供的补丁。
- x86/x64:回移(backport)math.min()/math.max() 参数检查的修复。感谢 Mike Pall 提供的补丁。
ngx_postgres 升级到 v1.1
- 修复:当被其他模块包装时恢复 postgres 的 peer 数据。感谢 lijunlong 提供的补丁。
lua-rds-parser
- 添加 .gitattributes 文件以修正 GitHub 的语言标签。感谢 Yichun Zhang (agentzh) 提供的补丁。
- 新增:添加 travis-ci 支持。感谢 Ilya Shipitsin 提供的补丁。
- 美化 README。感谢 Yichun Zhang (agentzh) 提供的补丁。
xss-nginx-module 升级到 v0.07
- 修复:修复 #22 模块已加载的问题。感谢 lijunlong 提供的补丁。
- 新增:添加动态构建支持。感谢 Su Yang 提供的补丁。
lua-resty-mysql 升级到 v0.30
- 新增:添加对 ed25519 的支持。感谢 lijunlong 提供的补丁。
form-input-nginx-module
- 文档:nginx 兼容性可追溯至 1.9.15。感谢 Yichun Zhang (agentzh) 提供的补丁。
lua-resty-lock
- 文档:修正 README.markdown 中的包状态。感谢 jumper047 提供的补丁。
echo-nginx-module 升级到 v0.64
- 文档:更新 README.md 中的发布日期和版本。感谢 lijunlong 提供的补丁。
- 优化:增加对 freenginx 的兼容。感谢 lijunlong 提供的补丁。
redis2-nginx-module
- 文档:更新 nginx 兼容性列表。感谢 Yichun Zhang (agentzh) 提供的补丁。
- 文档:更新 README.markdown。感谢 Steve 提供的补丁。
- travis:克隆 lua-resty-core 和 lua-resty-lrucache 仓库。感谢 Thibault Charbonnier 提供的补丁。
lua-resty-websocket
- 文档:修正注释中的拼写错误。感谢 harry-xm 提供的补丁。
lua-upstream-nginx-module 升级到 v0.08
- 修复:在需要时获取 rlock 和 wlock。感谢 Aleksandr Tuliakov 提供的补丁。
- 开发:确保在 nginx 1.13.6 下测试通过。感谢 Yichun Zhang (agentzh) 提供的补丁。
- 文档:get_upstreams() 实际上会获取由 proxy_pass 创建的隐式 upstream,但文档此前称其被排除。感谢 silence2014 提供的补丁。
- 文档:修正 get_servers 文档中的小拼写错误。感谢 chronolaw 提供的补丁。
- 文档:更新 get_servers 的返回值说明。感谢 Peter Zhu 提供的补丁。
- travis:将 nginx 1.13.6 加入测试矩阵。感谢 Yichun Zhang (agentzh) 提供的补丁。
- travis:修复构建。感谢 Yichun Zhang (agentzh) 提供的补丁。
lua-resty-upstream-healthcheck 升级到 v0.09
- 优化:在使用 resolve 指令时更新 peers。感谢 Aleksandr Tuliakov 提供的补丁。
lua-resty-string 升级到 v0.17
- 新增:添加 AES-256-CTR 绑定并复用缓冲区。感谢 ^_^ 提供的补丁。
lua-cjson 升级到 v2.1.0.17
- 修复:修复解码超出 lua_Integer 范围的数字时被截断的问题。(#116) 感谢 James McCoy 提供的补丁。
- 新增:添加在解码时允许注释的选项。感谢 skewb1k 提供的补丁。
- 新增:添加对编码输出进行缩进的选项。感谢 skewb1k 提供的补丁。
- 修复:显式指针转 int 的警告。感谢 Deyan Dobromirov 提供的补丁。
- 优化:将 cjson.decode_allow_comments 重命名为 cjson.decode_allow_comment。感谢 lijunlong 提供的补丁。
lua-resty-shell
- 文档:补充 max_size 参数默认值的说明。感谢 lijunlong 提供的补丁。
- README.md:补充默认超时的相关说明。(#21) 感谢 Jeffrey 'jf' Lim 提供的补丁。
headers-more-nginx-module
- 文档:在 README 中补上分号以修正语法。感谢 Baba Boota 提供的补丁。
- 文档:更新版权信息。感谢 lijunlong 提供的补丁。
- 文档:更新最新兼容的 nginx 版本。感谢 lijunlong 提供的补丁。
set-misc-nginx-module
- 文档:修正 README.markdown 中的若干拼写错误。感谢 willmafh 提供的补丁。
drizzle-nginx-module 升级到 v0.1.13
- 修复:将 peer 数据暂存到模块 ctx 中,以在 upstream 包装器下保持有效。(#52) 感谢 lijunlong 提供的补丁。
完整变更日志
自上一个正式发布版本以来的完整变更日志,可在 1.31.1.x 变更日志页面查阅。
测试
我们已在 Amazon EC2 测试集群上进行了大量测试,确保所有组件(包括 Nginx 核心)能够良好协同工作。最新的测试报告始终可在此处查看:
https://qa.openresty.org/
我们还始终在自有的全球 CDN 网络(代号 "mini CDN",为 openresty.org 与 openresty.com 网站提供支撑)中,运行基于最新开源版 OpenResty 的 OpenResty Edge 商业软件。更多详情请见 https://openresty.com/。
社区支持
请参阅社区页面 https://openresty.org/en/community.html。商业技术支持,以及实时、无侵入的在线监控与性能分析方案,由官方的 OpenResty XRay 产品提供:https://openresty.com/en/xray/
反馈
非常欢迎对本次发布提出反馈。欢迎在 GitHub 上创建新的 issue( https://github.com/openresty/openresty/issues ),或发送邮件到我们的任一邮件列表( https://openresty.org/en/community.html#mailing-lists )。