要确认 nginx 当前已加载哪些动态模块,需三步交叉验证:先查配置中 load_module 指令位置及路径,再确认对应 .so 文件存在且权限/架构匹配,最后用 nginx -t 验证加载成功与否;仅 nginx -v 无法反映动态模块。

要确认 Nginx 当前已加载哪些动态模块,不能只看 nginx -V(它只反映静态编译模块),而需结合配置、文件系统和语法验证三步交叉确认。
检查 nginx.conf 中的 load_module 指令
动态模块必须通过 load_module 显式声明才能生效,该指令必须出现在 events 块之前(通常在配置文件最顶部)。常用检查方式:
- 搜索所有配置位置:
grep -r "load_module" /etc/nginx/ --include="*.conf" - 若使用 Debian/Ubuntu 的模块启用机制,还可查:
ls /etc/nginx/modules-enabled/ 2>/dev/null,再对每个文件执行cat查看内容 - 注意路径是否为绝对路径(如
/usr/lib/nginx/modules/ngx_http_echo_module.so)或相对路径(如modules/xxx.so),后者依赖prefix路径解析
确认 .so 文件真实存在且可访问
仅写 load_module 不代表模块已就绪;对应 .so 文件必须存在、权限正确、架构匹配(如 x86_64 vs aarch64):
- 常见模块目录:
/usr/lib/nginx/modules/、/etc/nginx/modules/、/usr/local/nginx/modules/(取决于安装方式) - 快速列出:
ls -l /usr/lib/nginx/modules/*.so 2>/dev/null - 检查文件权限:
ls -l输出中应有可读(r)和可执行(x)位,且属主/组允许 nginx worker 进程读取(通常为root:root或root:www-data)
用 nginx -t 验证加载状态
nginx -t 是唯一能真正反映“是否加载成功”的命令——它会尝试解析配置并调用 dlopen() 加载每个 load_module 指向的文件:
- 若模块路径错误、文件不存在、ABI 不兼容(如 Nginx 版本与模块编译版本不一致)、缺少依赖库(如
libpcre.so.1),nginx -t会明确报错,例如:nginx: [emerg] dlopen() "/usr/lib/nginx/modules/ngx_http_geoip2_module.so" failed ... - 若输出为
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok,说明所有load_module指令均通过加载验证 - 注意:
nginx -t不会告诉你“启用了什么功能”,只确认加载无误;功能是否可用还需结合后续配置(如brotli on;)和实际请求测试
补充:运行时确认模块是否被调用(非加载,而是启用)
加载成功 ≠ 功能生效。某些模块需在 http、stream 或 location 块中显式启用指令才起作用:
- 例如
ngx_http_ssl_module是静态模块,但 SSL 功能需配置listen 443 ssl才启用 - 又如
ngx_http_brotli_filter_module是动态模块,但必须写brotli on;才压缩响应 - 可通过
curl -I https://your-site/查看响应头(如Content-Encoding: br)反推模块是否实际参与处理











