最直接有效的方式是运行 nginx -V,它输出版本号和 configure arguments 行,其中以 --with- 或 --without- 开头的选项表明静态编译模块的启用或禁用状态,动态模块需通过 load_module 指令和 .so 文件另行验证。

最直接有效的方式是运行 nginx -V(注意是大写 V),它会输出完整的编译信息,其中 configure arguments 行明确列出所有静态编译进二进制的模块开关。
看懂 nginx -V 的输出结构
执行后通常显示两行关键内容:
- 第一行:版本号,例如
nginx version: nginx/1.24.0 - 第二行起:完整 configure 命令参数,即源码编译时实际使用的全部选项
重点在 configure 行中以 --with- 或 --without- 开头的部分——它们代表模块是否被静态编译进 Nginx 二进制文件。比如:
-
--with-http_ssl_module→ HTTPS 功能已内置,可直接使用ssl_certificate等指令 -
--with-stream→ 四层代理支持已启用 -
--without-mail_pop3_module→ POP3 模块未编译 -
--add-module=/path/to/echo-nginx-module→ 第三方模块已静态集成
快速提取和筛选内置模块
不用手动滚动长字符串,用管道命令高效定位:
- 只看启用的模块:
nginx -V 2>&1 | grep -o '\--with[^ ]*module' - 检查 SSL 是否支持:
nginx -V 2>&1 | grep -q 'with-http_ssl_module' && echo "已启用" - 查看安装路径前缀:
nginx -V 2>&1 | grep -- '--prefix=' - 确认配置文件默认位置:
nginx -V 2>&1 | grep -- '--conf-path='
2>&1 是关键,它把 stderr(部分系统将 configure 输出写入错误流)也重定向到标准输出,确保 grep 不漏内容。
区分静态模块和动态模块
nginx -V 只反映静态编译模块。动态模块(.so 文件)不会出现在这里,需另行验证:
- 查配置中加载指令:
grep "load_module" /etc/nginx/nginx.conf /etc/nginx/modules-enabled/* 2>/dev/null - 查模块文件是否存在:
ls /usr/lib/nginx/modules/*.so或ls /etc/nginx/modules/*.so - 运行
nginx -t验证加载是否成功——路径错误、架构不匹配或依赖缺失都会报错
确认你查的是当前运行的 Nginx 实例
服务器上可能存在多个 Nginx(如包管理安装版与源码编译版并存),需确保调用的是主用二进制:
- 查正在运行的进程路径:
ls -l /proc/$(cat /var/run/nginx.pid)/exe - 用绝对路径执行:
/usr/sbin/nginx -V或/usr/local/nginx/sbin/nginx -V - 避免因
PATH导致误查旧版本或非主用实例











