最直接的方式是运行 nginx -v 查看版本、编译环境及 configure 参数,其中 --with- 和 --without- 开头的选项表明静态模块启用或禁用状态,动态模块需通过 load_module 指令和 .so 文件确认。

最直接的方式是运行 nginx -V(注意大写 V),它会一次性输出 Nginx 版本号、编译环境及完整的 configure 参数,其中就包含所有静态模块的启用或禁用状态。
看懂 nginx -V 的输出结构
执行 nginx -V 后通常显示两行关键信息:
- 第一行:版本号,例如
nginx version: nginx/1.24.0 - 第二行起:完整的 configure 命令参数,即当初编译时使用的全部选项
重点看 configure 行中以 --with- 或 --without- 开头的部分,它们明确表示模块是否被静态编译进二进制文件。例如:
-
--with-http_ssl_module→ HTTPS 功能已集成,可直接使用ssl_certificate等指令 -
--with-stream→ 四层代理能力已启用 -
--without-mail_pop3_module→ POP3 模块未编译 -
--add-module=/path/to/echo-nginx-module→ 第三方模块已静态编译
快速筛选特定模块是否存在
不用手动翻长字符串,用 grep 直接过滤:
- 查 SSL 是否启用:
nginx -V 2>&1 | grep -q 'with-http_ssl_module' && echo "已启用" - 列出所有 with- 开头的模块:
nginx -V 2>&1 | grep -o '\--with[^ ]*module' - 检查第三方模块路径:
nginx -V 2>&1 | grep -o 'add-module=[^ ]*'
注意:2>&1 是为了把错误输出也转为标准输出,确保 grep 不漏内容(某些系统会把部分信息输出到 stderr)。
区分静态模块和动态模块
nginx -V 只反映静态编译的模块。动态模块(.so 文件)不会出现在这里,需另外确认:
- 在配置中搜索
load_module指令: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 导致误查旧版本或非主用二进制文件。











