必须源码编译静态集成,需严格匹配Nginx版本与模块兼容性,通过./configure --add-module指定绝对路径,并保留原有编译参数,最后用nginx -t验证指令是否识别。

启用第三方 Upstream 模块(如 nginx_upstream_check_module、ngx_http_upstream_jdomain_module 等)必须通过源码编译静态集成,不能运行时加载。核心是确保模块与当前 Nginx 版本 ABI 兼容,并在 ./configure 阶段正确引入。
确认模块兼容性与环境匹配
Upstream 类模块对 Nginx 内部结构(如 ngx_http_upstream_srv_conf_t、ngx_http_upstream_main_conf_t)依赖极强,版本错配极易编译失败或运行崩溃:
- 执行
nginx -V查出当前 Nginx 版本(如1.24.0)和完整 configure 参数,必须使用完全相同版本的 Nginx 源码重新编译 - 检查模块 GitHub 页面的
README或CHANGELOG,确认其明确支持你的 Nginx 主版本(例如:v0.4.0 的 upstream_check 仅适配 1.16–1.24,不支持 1.25+) - 某些模块(如
upstream_check)要求已启用--with-http_upstream_module(默认开启),但可能还需--with-http_realip_module或特定 PCRE 版本,需按文档核对
准备模块源码并验证 config 脚本
Upstream 模块通常以独立仓库存在,需手动下载并确保结构合规:
- 从可信源获取,例如:
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git /usr/src/nginx-modules/upstream_checkgit clone https://github.com/vozlt/nginx-module-vts.git /usr/src/nginx-modules/vts - 进入模块目录,确认存在可执行的
config文件(不是.conf配置文件),且有执行权限:ls -l /usr/src/nginx-modules/upstream_check/config→ 应显示-rwxr-xr-x - 若缺失
config或执行报错,说明该模块未维护或不兼容当前 Nginx 主干,不可强行使用
配置编译参数并集成模块
进入 Nginx 源码根目录后,复用原 configure 参数,追加 --add-module 指向 Upstream 模块路径:
- 示例命令(含典型 upstream 相关依赖):
./configure \--prefix=/etc/nginx \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--add-module=/usr/src/nginx-modules/upstream_check \--add-module=/usr/src/nginx-modules/vts -
--add-module必须用绝对路径;多个模块重复写该参数,顺序无关 - 务必保留原有所有
--with-*和--without-*选项,否则会丢失 SSL、HTTP/2 等关键功能
编译安装与功能验证
完成 configure 后,执行编译并谨慎替换二进制文件:
-
make -j$(nproc)→ 编译生成新objs/nginx - 不建议直接
make install,避免覆盖 conf、html、logs 目录;推荐:cp objs/nginx /usr/sbin/nginx(若原二进制在/usr/sbin/) - 验证是否集成成功:
nginx -V 2>&1 | grep -E "(upstream_check|vts)"→ 应无输出(静态模块不会出现在-V中)
更可靠方式:启动后检查 error.log 是否有模块初始化日志,或在配置中启用对应指令(如check interval=3 rise=2 fall=5 timeout=1),再执行nginx -t;若报“unknown directive”则说明未集成成功











