运行 nginx -m 可列出当前 Nginx 编译启用的静态与动态模块;需确认二进制路径,注意版本需 ≥1.9.11,输出含 Static modules(内置)和 Shared modules(动态加载),未编译、未安装或未配置的模块不显示。

直接在终端运行 nginx -m 即可列出当前 Nginx 编译时启用的所有模块(包括静态编译和动态加载的模块)。
确认 Nginx 可执行文件路径
确保你调用的是你实际使用的 Nginx 二进制文件,尤其在系统中存在多个版本(如系统包安装、源码编译、Homebrew 安装等)时:
- 运行
which nginx或command -v nginx查看路径 - 若使用自定义路径(如
/usr/local/nginx/sbin/nginx),请用完整路径执行:/usr/local/nginx/sbin/nginx -m - 某些发行版(如 Ubuntu/Debian)可能默认不包含全部模块,需检查是否安装了
nginx-full而非nginx-light
理解输出内容
nginx -m 的输出分为两部分:
-
Static modules:编译进二进制文件、无法卸载的模块(如
ngx_http_core_module、ngx_http_static_module) -
Shared modules:以
.so文件形式存在、通过load_module指令按需加载的动态模块(如ngx_http_geoip2_module、ngx_http_vts_module)
注意:只有已编译进当前二进制或已安装对应 .so 文件并被配置引用的模块才会出现在该列表中;未编译、未安装或未在配置中 load_module 的动态模块不会显示。
常见问题排查
如果执行后报错或输出为空,考虑以下情况:
-
nginx: error while loading shared libraries:动态库缺失,尝试先运行ldd $(which nginx)检查依赖 -
nginx: invalid option: "-m":Nginx 版本过低(-m自 1.9.11 起引入),升级至较新稳定版即可 - 只看到少量模块:可能是精简版 Nginx(如 Alpine Linux 的
nginx-mod-http-xxx分离包未全部安装),需补全对应模块包
配合其他命令辅助验证
想进一步确认某模块是否真正生效,可结合:
-
nginx -V:查看完整编译参数(含--add-module=...和--with-xxx-module) -
nginx -t:测试配置,确保load_module路径正确、无语法错误 -
ls /etc/nginx/modules/*.so或find /usr -name "*geoip*.so" 2>/dev/null:手动查找已安装的动态模块文件











