<p>最可靠方式是执行 nginx -V(大写V),输出 configure arguments 中以 --with- 开头的选项即为启用的静态模块,如 --with-http_ssl_module;--without- 表示禁用,核心模块虽不显式列出但始终静态存在。</p>

源码安装的 Nginx 查看已加载的静态模块,最可靠的方式是执行 nginx -V(大写 V),它会输出编译时的完整 configure 参数,从中可明确识别所有静态编译进二进制文件的模块。
用 nginx -V 查看静态模块
该命令不依赖配置文件或运行状态,直接反映编译产物本身的能力:
- 运行
nginx -V(注意是大写 V;小写 v 只显示版本号) - 在输出的 configure arguments 行中,查找以
--with-开头的选项,例如:--with-http_ssl_module、--with-http_gzip_static_module、--with-stream - 这些
--with-项即为启用的静态模块;--without-项表示被显式禁用的模块 - 未出现
--with-或--without-的模块,默认按 Nginx 版本规则决定是否内置(如ngx_http_core_module、ngx_events_module等核心模块总是静态存在)
检查源码编译前的默认模块配置
如果你还保留原始解压后的源码目录,可直接查看编译决策依据:
- 进入 Nginx 源码根目录(如
nginx-1.24.0/),打开auto/options - 执行
grep '=YES$' auto/options,列出所有默认启用的模块(如HTTP_CACHE=YES) - 执行
grep '^--with-' auto/options可看到所有支持的--with-配置开关,但它们是否生效取决于你 configure 时是否传入 - 注意:这个文件只反映源码支持范围,不是当前安装的实际模块列表
确认核心静态模块是否实际存在
部分基础模块(如事件模块、HTTP 核心模块)不会显式出现在 nginx -V 中,但始终静态链接:
- 它们定义在源码
objs/ngx_modules.c文件里,编译后自动生成 - 该文件包含
ngx_modules[]数组,罗列全部静态模块指针(包括&ngx_core_module、&ngx_http_module、&ngx_epoll_module等) - 若已编译完成,可直接查看:
cat objs/ngx_modules.c | grep 'ngx_.*_module' | head -20
区分静态模块与动态模块
动态模块(.so 文件)不会出现在 nginx -V 输出中,需单独验证:
- 检查配置文件中是否有
load_module modules/xxx.so;指令 - 确认对应 .so 文件存在且路径正确(常见位置:
/usr/lib/nginx/modules/或$PREFIX/modules/) - 运行
nginx -t可检测动态模块加载是否成功(路径错误、ABI 不匹配会报错)


















