第三方模块安装#
除了我们自己为 Angie 和 Angie PRO 开发的动态模块外,
我们还在仓库中收集并发布了一些流行的 nginx 兼容第三方模块的软件包,
这些模块由我们公司之外的开发者开发。 第三方模块软件包的安装方式与我们自己的软件包相同,都是从我们的仓库安装: 要在 配置 中使用已安装的模块,
请在 小技巧 软件包名称和配置中的模块本身具有以下前缀: Angie: Angie PRO: 备注 我们不审查这些模块的源代码,
也不对安装它们的后果负责;
这些软件包的编译完全基于大量用户请求,
仅仅 为了用户的便利。 模块 版本 软件包 如果您需要的模块不在列表中,可以为通过我们的软件包安装的 Angie 或
Angie PRO 自行构建该模块。Angie 和 Angie PRO 只加载符合下列条件的动态模块: 为同一产品(Angie 或 Angie PRO)构建; 为完全相同的版本构建; 构建选项相匹配。 我们的软件包在构建时不带 这些步骤以 ngx-fancyindex
为例,这是一个随意选取的、不在我们列表中的模块。其他模块的步骤相同,
只需换成各自的仓库地址和模块名称,并按其自身的构建说明另行安装所需的库或模块。 对于以这种方式构建的模块,我们不审查其代码,也不对加载它们的后果负责。 安装编译器、构建 Angie 所用的库以及获取源代码的工具。在 Debian 和 Ubuntu 上: 在 RHEL、Fedora 及其衍生版上,还需安装 仅 Angie PRO:安装与已安装的 在 RHEL、Fedora 及其衍生版上: 下载并解压已安装版本的 Angie 源代码。对于 Angie PRO,这指的是同一版本的 Angie 源代码;
Angie PRO 的文件会在第 6 步加入其中。Angie PRO 输出的版本带有 在与 Angie 源代码目录同级的位置克隆模块的仓库;示例中为 ngx-fancyindex: 使用已安装的 Angie 或 Angie PRO 的构建选项配置构建,并加入该模块。
在 RHEL、Fedora 及其衍生版上,请先设置发行版的标准编译器标志;
我们的软件包也是用这些标志构建的,但 然后,在任何发行版上执行: eval 让 shell 按引号解析输出的选项,因此带空格的值不会被拆开。
第二个 sed 会去掉 如果 ./configure 失败,请先解决导致失败的问题(例如安装缺少的库),
并在再次运行之前删除 在 RHEL、Fedora 及其衍生版上,因跳过某个步骤而产生的错误不会指明该步骤:
没有 仅 Angie PRO:用 Angie PRO 的头文件和构建配置替换源代码树中的对应文件: 软件包沿用 构建模块: 构建结果是 安装模块: 无论使用的是 Angie 还是 Angie PRO,都请用 load_module 指令
在 如果模块与已安装的 Angie 或 Angie PRO 不匹配, Angie 或 Angie PRO 的每个新版本都需要重新构建模块:新版本会拒绝为前一版本构建的模块,
并报告版本错误。如果在将软件包升级到新版本时服务正在运行,
软件包会尝试在线把它切换到新的可执行文件。如果模块是为前一版本构建的,
新的可执行文件会拒绝该配置,因此切换不会发生:
软件包会输出 升级之后,请重新构建并重新安装模块,沿用第一次构建时的源代码:
重复第 3 步以及第 5 至 8 步,并从第一次构建时执行第 3 步的目录开始;
对于 Angie PRO,请先重复第 2 步。
最后一步使用 install 而不是 cp,因为 install
会写入新文件,而不是覆盖正在运行的服务已加载的那个文件。
然后重启服务,使新的可执行文件带着重新构建的模块启动: 这里仅重新加载是不够的:重新加载会成功,但正在运行的可执行文件仍会使用它此前已加载的那份模块。
要在不中断服务的情况下切换到新的可执行文件和重新构建的模块,
请使用 在线升级 代替重启。安装和配置#
main 上下文中使用 load_module 指令加载它:load_module modules/<module_name>.so;
angie-module-<name>angie-pro-module-<name>软件包列表#
angie-module-auth-jwtangie-pro-module-auth-jwtangie-module-auth-ldapangie-pro-module-auth-ldapangie-module-auth-pamangie-pro-module-auth-pamangie-module-auth-spnegoangie-pro-module-auth-spnegoangie-module-auth-totpangie-pro-module-auth-totpangie-module-brotliangie-pro-module-brotliangie-module-cache-purgeangie-pro-module-cache-purgeangie-module-cgiangie-pro-module-cgiangie-module-combined-upstreamsangie-pro-module-combined-upstreamsangie-module-dav-extangie-pro-module-dav-extangie-module-dynamic-limit-reqangie-pro-module-dynamic-limit-reqangie-module-echoangie-pro-module-echoangie-module-enhanced-memcachedangie-pro-module-enhanced-memcachedangie-module-evalangie-pro-module-evalangie-module-geoip2angie-pro-module-geoip2angie-module-headers-moreangie-pro-module-headers-moreangie-module-http-auth-radiusangie-pro-module-http-auth-radiusangie-module-jwtangie-pro-module-jwtangie-module-keyvalangie-pro-module-keyvalangie-module-luaangie-pro-module-luaangie-module-modsecurityangie-pro-module-modsecurityangie-module-njsangie-pro-module-njsangie-module-ndkangie-pro-module-ndkangie-module-oidcangie-pro-module-oidcangie-module-opentracingangie-pro-module-opentracingangie-module-otelangie-pro-module-otelangie-module-postgresangie-pro-module-postgresangie-module-redis2angie-pro-module-redis2angie-module-rtmpangie-pro-module-rtmpangie-module-set-miscangie-pro-module-set-miscangie-module-subsangie-pro-module-subsangie-module-testcookieangie-pro-module-testcookieangie-module-unbrotliangie-pro-module-unbrotliangie-module-unzstdangie-pro-module-unzstdangie-module-uploadangie-pro-module-uploadangie-module-vodangie-pro-module-vodangie-module-vtsangie-pro-module-vtsangie-module-weserv-imagesangie-pro-module-weserv-imagesangie-module-zipangie-pro-module-zipangie-module-zstdangie-pro-module-zstd为 Angie 或 Angie PRO 的软件包版本构建模块#
--with-compat 选项,因此通过软件包安装的
Angie 和 Angie PRO 会拒绝以默认的 ./configure 选项或
--with-compat 构建的模块。下面的步骤用于构建与软件包相匹配的模块。
您无需重新构建或替换 Angie 或 Angie PRO 本身:软件包保持已安装状态,
模块则单独构建并加载到其中。模块在与已安装软件包版本相同的 Angie 源代码树中构建,
并采用该软件包的构建选项。Angie PRO 仅以二进制软件包形式提供,不含源代码,
但它与 Angie 使用同一套构建系统。要为 Angie PRO 构建模块,请使用同一份 Angie 源代码树,
并配合 angie-pro-headers 软件包提供的 Angie PRO 头文件和构建配置。$ sudo apt install build-essential libpcre2-dev zlib1g-dev libssl-dev libcrypt-dev curl git
redhat-rpm-config,
它提供了构建我们的软件包时所用的编译器设置:$ sudo dnf install gcc make pcre2-devel zlib-devel openssl-devel libxcrypt-devel redhat-rpm-config git
angie-pro 软件包版本相同的
angie-pro-headers。angie-pro-headers 软件包会把 Angie PRO 的头文件和构建配置
安装到 /usr/include/angie-pro/。它来自与 angie-pro
相同的仓库,是否可用取决于您的许可证。
它不依赖 angie-pro,因此软件包管理器不会匹配二者的版本,请明确指定版本。
在 Debian 和 Ubuntu 上:$ sudo apt install "angie-pro-headers=$(dpkg-query -W -f='${Version}' angie-pro)"
$ sudo dnf install "angie-pro-headers-$(rpm -q --qf '%{VERSION}-%{RELEASE}' angie-pro)"
(PRO) 后缀,
第一条命令会将其去掉:$ VERSION=$(sudo angie -v 2>&1 | sed -n 's|^Angie version: Angie/\([0-9.]*\).*|\1|p')
$ echo "$VERSION"
1.12.3
$ curl -fsSO "https://download.cn.angie.software/files/angie-$VERSION.tar.gz"
$ tar -xzf "angie-$VERSION.tar.gz"
$ git clone https://github.com/aperezdc/ngx-fancyindex
angie -V 不会显示它们:$ export CFLAGS="$(rpm --eval '%{optflags}')"
$ cd "angie-$VERSION"
$ eval ./configure $(sudo angie -V 2>&1 | sed -n 's/^configure arguments: //p' | sed 's/ --with-license//') \
--add-dynamic-module=../ngx-fancyindex
--with-license,部分 Angie PRO 软件包带有该选项:
Angie 的 ./configure 不认识这个选项,而且它只影响 Angie PRO 的可执行文件,
不影响模块。对于 Angie,选项中不含它。../angie-feature-cache 目录:软件包的选项包含
--feature-cache=../angie-feature-cache,
因此 ./configure 会把失败的检查结果保存在该目录中,
并在下次运行时将它们报告为 using cached check ... not found。redhat-rpm-config 时,./configure 会停止并报告
the invalid value in --with-ld-opt="value";
没有导出 CFLAGS 时,则报告
C99 variadic macros support is not found。$ cp -r /usr/include/angie-pro/. src/
$ cp src/objs/* objs/
src 目录的布局,因此第一条命令会替换头文件。
软件包的 objs 子目录现位于 src/objs,其中存放 Angie PRO 的构建配置
(ngx_auto_config.h 和 ngx_auto_headers.h);
第二条命令把这些文件复制到 ./configure 所创建的 objs 目录中。
两条命令缺一不可。头文件为模块提供 Angie PRO 的结构和产品签名;
构建配置则决定编译模块所用的构建选项:Angie PRO 有 Angie 的 ./configure
不认识的选项,用 Angie 的配置编译的模块与 Angie PRO 的结构布局不会一致。$ make modules
objs/ngx_http_fancyindex_module.so 文件。$ sudo install -m 644 objs/ngx_http_fancyindex_module.so /etc/angie/modules/
加载与升级#
main 上下文中加载模块,然后检查配置并重新加载:load_module modules/ngx_http_fancyindex_module.so;
$ sudo angie -t && sudo systemctl reload angie
angie -t 会失败,
并给出指明不匹配情况的消息:module "file" was built for "Angie" but you are running "Angie PRO"
或产品名称互换后的同样消息,表示模块是为另一个产品构建的;module "file" version module_version instead of angie_version,
表示模块是为另一个版本构建的;每个版本都以一个整数输出,
其中次版本号和补丁号用零补足到三位数;module "file" is not binary compatible,
表示模块是用不同的构建选项构建的。Binary upgrade failed 消息,而原来的可执行文件继续提供服务。$ sudo angie -t && sudo systemctl restart angie