最可靠的方式是结合 nginx -v 查看编译时显式启用的模块和源码 auto/options 文件确认默认内置模块;前者显示 --with- 或 --add-module= 参数,后者通过 grep "yes$" options 列出 http_rewrite=yes 等默认启用项,二者互补覆盖全部模块类型。

最可靠的方式是结合两个来源:运行 nginx -V 查看编译时显式启用的模块,再检查源码包中的 auto/options 文件确认默认内置模块。仅靠一个命令无法全覆盖,因为 Nginx 的模块分“默认内置”和“显式启用”两类。
用 nginx -V 查看显式启用的模块
执行以下命令:
nginx -V输出中第二行是 configure arguments:,重点关注以 --with- 或 --add-module= 开头的参数,例如:
-
--with-http_ssl_module:表示编译时明确启用了 HTTPS 支持 -
--with-http_v2_module:表示启用了 HTTP/2 -
--add-module=/path/to/echo:表示集成了第三方模块
注意:小写 -v 只显示版本号,必须用大写 -V 才能看到完整配置。
查 auto/options 确认默认内置模块
如果你有原始 Nginx 源码目录(如 /usr/src/nginx-1.24.0/),进入 auto/ 子目录,运行:
结果中形如 HTTP_REWRITE=YES、HTTP_PROXY=YES、EVENT_SELECT=YES 的条目,就是 Nginx 默认自带且无需额外指定就启用的模块。这些不会出现在 nginx -V 输出里,因为它们属于基础构建选项,不是通过 --with- 显式开关控制的。
区分静态、动态与第三方模块
模块类型不同,验证方式也不同:
- 静态模块(内置):在
auto/options中标为=YES,或在nginx -V中出现--with- - 动态模块(.so 文件):不体现于
nginx -V,需检查配置中是否有load_module modules/xxx.so;,并确认文件存在且nginx -t无报错 - 第三方模块:只会在
nginx -V中以--add-module=形式出现,路径通常指向外部源码目录
快速验证关键模块是否可用
光看参数不等于功能就绪,建议进一步确认:
- 运行
nginx -t确保配置语法正确,动态模块加载无路径错误 - 检查错误日志:
tail -n 20 /var/log/nginx/error.log,留意类似module not found或version mismatch的提示 - 对核心模块做简单测试:比如配置
gzip on;后用curl -I -H "Accept-Encoding: gzip" http://localhost/查看响应头是否含Content-Encoding: gzip











