大写-v参数可查看nginx完整编译配置,是确认静态模块支持的唯一依据;小写-v仅显示版本号。需结合grep过滤configure参数或检查load_module指令来全面验证模块能力。

小写 -v 只显示版本号,无法确认模块;真正能核对线上环境模块支持情况的,是大写 -V。它输出的是编译时的完整配置快照,直接反映当前二进制文件具备哪些能力。
区分 -v 和 -V 的实际输出差异
运行以下两个命令,对比结果就很清楚:
-
nginx -v→ 仅一行:nginx version: nginx/1.24.0 -
nginx -V→ 两行:
第一行同上;
第二行是完整的 configure arguments:,含所有--with-、--without-和--add-module=参数
第二行才是判断模块是否“静态编译进本体”的唯一依据。
快速定位关键模块是否启用
不用通读整行 configure 参数,用 grep 直接过滤更高效:
- 查 HTTPS 支持:
nginx -V 2>&1 | grep -o with-http_ssl_module - 查 HTTP/2 支持:
nginx -V 2>&1 | grep -o with-http_v2_module - 查真实 IP 解析:
nginx -V 2>&1 | grep -o with-http_realip_module - 查是否有第三方模块:
nginx -V 2>&1 | grep -o 'add-module='
有输出即表示启用,无输出则未编译该模块(注意大小写和连字符不能错)。
注意动态模块不在此列
nginx -V 只显示静态编译模块。如果线上用了 load_module 加载的 .so 动态模块(如 ngx_http_geoip2_module.so),它们不会出现在 configure 参数里。
- 检查配置中是否有
load_module modules/xxx.so;指令 - 确认对应文件是否存在:
ls /usr/lib/nginx/modules/或ls /etc/nginx/modules/ - 动态模块需单独验证其指令是否被识别,例如执行
nginx -t看是否报错
生产环境核对建议
线上排查模块问题时,推荐组合使用:
- 先跑
nginx -V确认静态能力基线 - 再查
nginx.conf中的load_module行,补全动态模块清单 - 最后用
nginx -t验证整体配置是否可加载(含模块指令语法)
这样三步下来,就能准确知道当前 Nginx 实例到底支持什么、不支持什么,避免因模块缺失导致配置失效或服务异常。











