最直接有效的方法是运行 nginx -V(大写 V),它输出版本号和完整的 configure 参数,其中 --with-xxx-module 表示静态编译启用的模块,--without-xxx-module 表示禁用,动态模块需通过 load_module 指令、.so 文件存在性及 nginx -t 验证。

可以通过 nginx -V 命令查看当前 Nginx 编译时启用的模块列表,它会输出完整的编译参数,其中 --with-xxx-module 和 --without-xxx-module 就代表已启用或禁用的模块。
使用 nginx -V 查看编译参数和模块
运行以下命令:
nginx -V
注意是大写的 V(不是小写 v)。该命令不会启动 Nginx,只输出版本及 configure 参数。输出中重点关注 configure arguments: 这一行,后面跟着所有编译选项,例如:
--with-http_ssl_module --with-http_v2_module --with-http_realip_module --without-mail_pop3_module
这些就是实际参与编译的模块。带 --with- 的表示已静态编译进二进制文件;--without- 表示明确排除;没出现的第三方模块(如 ngx_brotli)则说明未编译进去。
区分静态模块与动态模块
Nginx 1.9.11+ 支持动态加载模块(.so 文件),这类模块不会出现在 nginx -V 的 configure 参数中,但可通过以下方式确认:
- 检查配置目录下的
modules/子目录(路径通常为/usr/lib/nginx/modules/或/etc/nginx/modules/),列出所有.so文件 - 在
nginx.conf中搜索load_module指令,例如:load_module modules/ngx_http_geoip2_module.so; - 执行
nginx -t可验证动态模块路径是否有效,加载失败会报错
快速提取模块名称的实用技巧
如果输出内容太长,可用管道过滤出模块相关部分:
nginx -V 2>&1 | grep -o '--with-[a-z_]*-module' | sort -u
这条命令能提取所有启用的官方模块名,并去重排序。对动态模块,可配合:
ls /usr/lib/nginx/modules/*.so 2>/dev/null | xargs -r basename
注意:运行时模块 ≠ 编译模块
nginx -V 只反映编译时的选择,不表示模块当前是否被启用。例如 --with-http_ssl_module 仅说明支持 HTTPS,但具体是否启用 TLS 还要看 server 块中是否有 listen 443 ssl 等配置。同样,动态模块必须在配置中显式 load_module 才生效。











