OpenResty® 通过 Lua 扩展 NGINX 的可扩展 Web 平台

OpenResty XRay

为 OpenResty 及更多构建的先进可观察性

×

限时优惠

请求 试用版 今天并获得诊断 报告
Learn more
新! OpenResty 1.25.3.2 现已发布!
新! OpenResty 1.21.4.4 现已发布!
新! 新的博客文章 OpenResty XRay 移动应用程序简介 已发布。

OpenResty® Deb 软件包

lijunlong , 2023 年 12 月 12 日(创建于 2017 年 6 月 6 日)

OpenResty 官方 APT 存储库 提供以下 deb 软件包(适用于 Ubuntu 和 Debian)。

openresty

这是核心 OpenResty 服务器的生产版本。

此软件包注册 /usr/bin/openresty,它是指向 OpenResty 的 nginx 可执行文件的符号链接,/usr/local/openresty/nginx/sbin/nginx。默认情况下,此 openresty 命令对您的 PATH 环境可见。当您要调用此软件包提供的 nginx 可执行文件时,始终键入 openresty 而不是 nginx。默认情况下,nginx 可执行文件对您的 PATH 环境不可见,但是,为了避免与同一系统中的其他 NGINX 软件包和安装发生任何混淆。

您还可以通过以下命令启动默认的 OpenResty 服务器

sudo systemctl start openresty

支持的其他 systemctl 操作是 stoprestartreload

默认服务器前缀为 /usr/local/openresty/。对于您自己的 OpenResty 应用程序,强烈建议您指定自己的服务器前缀并将其指向您自己的应用程序目录,例如

sudo openresty -p /opt/my-fancy-app/

然后您在 /opt/my-fancy-app/ 目录下有子目录,如 conf/html/logs/。这样,我们可以避免污染 /usr/local/openresty/ 下的 OpenResty 安装树,并允许多个不同的 OpenResty 应用程序共享相同的 OpenResty 服务器安装。但是,您将需要自己为每个 OpenResty 应用程序草拟一个 init 脚本。您可以使用默认的 /etc/init.d/openresty init 脚本作为模板。

我们使用我们自己的 OpenSSL 版本(通过 openresty-openssl 软件包)、PCRE、zlib 和 LuaJIT 来确保这些关键组件是最新的且格式良好。

openresty-resty

此软件包包含 resty 命令行实用程序,该实用程序对您的 PATH 环境可见(作为 /usr/bin/resty。要试用它,只需键入

$ resty -e 'ngx.say("hello")'
hello

此软件包依赖于标准 perl 软件包和我们的 openresty 软件包才能正常工作。

有关更多详细信息,请参阅 resty-cli 项目。

openresty-restydoc

此软件包包含 OpenResty 文档工具链和文档数据。最实用的工具是 restydoc 命令行实用程序,默认情况下它对您的 PATH 环境可见(作为 /usr/bin/restydoc

要试用它

restydoc ngx_lua

restydoc -s content_by_lua

restydoc -s proxy_pass

有关其用法的更多详细信息,请参阅 restydoc -h 命令的输出。

为了获得最佳结果,请确保您的终端使用 UTF-8 字符编码,并且您的 perlgroff 安装都足够现代。否则,这些非 ASCII 字符可能无法正确显示。

openresty-opm

此软件包包含用于 OpenResty 包管理器的命令行实用程序 opm。此工具可用于从中央 OPM 包服务器安装社区贡献的 OpenResty 包

https://opm.openresty.org.cn/

openresty-debug

这是 OpenResty 的正常调试版本。与 openresty 软件包相比,它具有以下区别

  • 它在构建中禁用了 C 编译器优化。
  • 它启用了 NGINX 调试日志功能。
  • 除了默认的 epoll 模块之外,它还在 NGINX 中启用了 poll 模块,以便可以使用 mockeagain 测试工具。
  • 它使用 openresty-openssl-debug 软件包而不是 openresty-openssl 来作为 OpenSSL 库。
  • 它在 LuaJIT 构建中启用了 API 检查和断言。
  • 它在 ngx_http_lua 模块中启用了断言。
  • 它使 ngx_http_lua 模块在 LuaJIT 在其 GC 管理的内存(默认行为是记录错误消息并优雅地退出当前工作进程)中出现分配失败时立即中止当前 nginx 工作进程。
  • 其 NGINX 的默认服务器前缀为 /usr/local/openresty-debug/
  • 对您的 PATH 环境可见的入口点是 openresty-debug 而不是 openresty
  • 它没有附带 init 脚本。

您永远不应在生产中使用此软件包。此软件包仅用于开发。

openresty-valgrind

这是一个针对 Valgrind 工具链的 OpenResty 特殊调试版本。Valgrind 是一个功能强大的工具,用于检查各种内存问题,例如内存泄漏和内存无效访问。为了最大限度地提高通过 Valgrind 捕获内存错误的可能性,除了 openresty-debug 软件包中完成的那些之外,此构建还执行以下操作

  • 它通过应用 "no-pool" 修补程序来禁用 NGINX 中使用的内存池。
  • 它强制 LuaJIT 使用系统分配器而不是它自己的分配器。
  • 它通过 -DLUAJIT_USE_VALGRIND C 编译器标志在 LuaJIT 构建中启用内部 Valgrind 协作。
  • 其 NGINX 的默认服务器前缀为 /usr/local/openresty-valgrind/
  • 对您的 PATH 环境可见的入口点是 openresty-valgrind 而不是 openresty-debug

有关 OpenResty 上下文中基于 Valgrind 的测试的更多详细信息,请参阅以下教程

https://openresty.gitbooks.io/programming-openresty/content/testing/test-modes.html#_valgrind_mode

要在 x86_64 系统上使用此 OpenResty 特殊构建,您必须使用 Valgrind 运行,否则 LuaJIT VM 甚至无法正确执行分配。

此外,为了获得最佳结果,在您的 nginx.conf 文件开头配置以下内容很重要

daemon off;
master_process off;
worker_processes 1;

openresty-asan

这是 OpenResty 的 gcc AddressSanitizer 构建。与 openresty-debug 软件包相比,它有以下更改

  • 它使用命令 gcc -fsanitize=address 进行编译和链接。
  • 它在构建中使用 C 编译器选项 -O1 -fno-omit-frame-pointer
  • 它通过应用 "no-pool" 修补程序来禁用 NGINX 中使用的内存池。
  • 它通过 -DLUAJIT_USE_VALGRIND C 编译器标志在 LuaJIT 构建中启用内部 Valgrind 协作。
  • 其 NGINX 的默认服务器前缀为 /usr/local/openresty-asan/
  • 对您的 PATH 环境可见的入口点是 openresty-asan 而不是 openresty-debug
  • 它使用 openresty-zlib-asanopenresty-pcre-asanopenresty-openssl-asan 软件包作为运行时依赖项。

在启动此 OpenResty 特殊构建之前,指定以下系统环境以避免已知的内存泄漏误报很重要

export ASAN_OPTIONS=detect_leaks=0

您可能还需要指定一些抑制规则以消除其他误报。有关更多详细信息,请参阅以下 ASAN 文档

https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer

openresty-openssl

这是我们自己构建的 OpenSSL 库。特别是,我们在构建中禁用了线程支持,以节省一些开销。

我们包含了自己的(很小的)补丁来支持 OpenResty 中的先进 SSL 功能,例如 ssl_session_fetch_by_lua

此外,我们还提供了自己的 OpenSSL 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 OpenSSL 版本。

openresty-openssl-debug

这是 OpenSSL 库的调试版本。与 openresty-openssl 相比,它有以下更改

  • 它禁用了任何 C 编译器优化。
  • 它是 Valgrind 清洁的,没有 Valgrind 假阳性。
  • 汇编代码被禁用,因此我们始终拥有完美的 C 级回溯等等。
  • 它安装到前缀 /usr/local/openresty-debug/openssl/ 中。

openresty-openssl111

这是我们自己构建的 OpenSSL v1.1.1 库。

我们包含了自己的(很小的)补丁来支持 OpenResty 中的先进 SSL 功能,例如 ssl_session_fetch_by_lua

此外,我们还提供了自己的 OpenSSL 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 OpenSSL 版本。

openresty-openssl111-debug

这是 OpenSSL v1.1.1 库的调试版本。与 openresty-openssl111 相比,它有以下更改

  • 它禁用了任何 C 编译器优化。
  • 它是 Valgrind 清洁的,没有 Valgrind 假阳性。
  • 汇编代码被禁用,因此我们始终拥有完美的 C 级回溯等等。
  • 它安装到前缀 /usr/local/openresty-debug/openssl111/ 中。

openresty-openssl111-asan

这是 OpenSSL v1.1.1 库的 gcc AddressSanitizer 版本。与 openresty-openssl111-debug 包相比,它有以下更改

  • 它使用命令 gcc -fsanitize=address 进行编译和链接。
  • 它使用 openresty-zlib-asan 包而不是 openresty-zlib 作为运行时依赖项。
  • 它在构建中使用 C 编译器选项 -O1 -fno-omit-frame-pointer
  • 它安装到前缀 /usr/local/openresty-asan/openssl111/ 中。

openresty-zlib

这是我们自己构建的 zlib 库,用于 gzip 压缩。我们提供自己的 zlib 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 zlib 版本。

openresty-pcre

这是我们自己构建的 PCRE 库,用于 gzip 压缩。我们提供自己的 PCRE 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 PCRE 版本。

openresty-pcre2

这是我们自己构建的 PCRE2 库。我们提供自己的 PCRE2 包,以确保即使在较旧的系统上,OpenResty(>= 1.25)中也使用最新的主流 PCRE2 版本。

liblemplate-perl

此软件包提供了命令行实用程序 lemplate,它可以将 perl 的 TT2 模板语言语法中的模板文件编译为 OpenResty 的独立 Lua 模块。

例如,OpenResty 官方网站 openresty.org 使用 Lemplate 作为 HTML 页面模板编译器。

libtest-nginx-perl

这是我们的 Test::Nginx 测试框架。阅读以下书籍章节,全面了解此测试框架

https://openresty.gitbooks.io/programming-openresty/content/testing/

开发包

我们为我们的二进制库包 openresty-zlibopenresty-pcreopenresty-opensslopenresty-openssl-debug 提供开发包。这些包包含对应二进制包的头文件和静态库归档文件。与它们的二进制对应物相比,它们的名字都带有一个 -dev 后缀。例如,对于 openresty-zlib 我们有 openresty-zlib-dev,对于 openresty-pcre 我们有 openresty-pcre-dev,对于 openresty-openssl 我们有 openresty-opnessl-dev,对于 openresty-openssl-debug 我们也有 openresty-openssl-debug-dev

调试符号包

我们为那些包含二进制组件的包(如 openrestyopenresty-openssl 包)提供调试符号包。它们的调试符号包只是在包名中添加了 -dbgsym 后缀,就像其他标准 deb 包一样。

例如,要安装 openresty 包的调试符号包,只需安装 openresty-dbgsym 包。同样,openresty-debug 包的调试符号包是 openresty-debug-dbgsym

源代码

用于构建这些包的源文件可以在 openresty-packaging GitHub 仓库中找到

https://github.com/openresty/openresty-packaging/tree/master/deb/

另请参阅

有关我们官方 OpenResty 包仓库的更多详细信息,请参阅 Linux Packages 页面。