Nginx无全局模块路径配置,需通过编译时--modules-path指定默认搜索路径,或运行时在nginx.conf顶层用load_module显式加载;路径可为相对(基于--modules-path)或绝对;必须置于main上下文,且需配合模块特有指令启用功能。

Nginx 本身不提供“全局模块路径”的统一配置指令,但可通过两种方式实现模块的全局加载与路径管理:一是编译时指定动态模块搜索路径,二是运行时在 主配置文件(nginx.conf)顶层 使用 load_module 显式声明模块路径。
编译阶段:设定默认模块搜索路径
安装 Nginx 时,可通过 --modules-path 参数指定动态模块的默认根目录。该路径会影响 load_module 指令中相对路径的解析基准:
-
--modules-path=/usr/lib64/nginx/modules(常见于 RHEL/CentOS RPM 包) -
--modules-path=/usr/local/nginx/modules(常见于源码编译安装)
注意:此路径仅作为 load_module 中相对路径的前缀,不会自动加载该目录下所有模块;必须显式写入配置才能启用。
运行阶段:用 load_module 加载指定模块
在 nginx.conf 的全局块(即 events 块之前) 添加 load_module 指令,路径可为绝对路径或相对于 --modules-path 的相对路径:
-
load_module modules/ngx_http_geoip2_module.so;(相对路径,依赖 --modules-path) -
load_module /opt/nginx/modules/ngx_http_auth_jwt_module.so;(绝对路径,最可靠)
✅ 必须放在全局块(main context),不能写在 http、server 或 location 块内;每行一个模块,且需以分号结尾。
验证与调试建议
加载后务必检查语法并确认模块生效:
- 执行
nginx -t验证配置合法性(路径错误会直接报错) - 重启后运行
nginx -V 2>&1 | grep -o 'with.*module'查看编译时启用的模块 - 使用
nginx -T 2>&1 | grep load_module确认配置中已正确读取load_module行 - 部分模块还需在 http 或 server 块中启用对应指令(如
geoip2、auth_jwt),仅load_module不代表功能就绪
常见误区提醒
❌ include 不用于加载模块,它只引入配置片段(如 conf.d/*.conf);
❌ modules 目录不是“插件市场”,Nginx 不会扫描或自动注册其中文件;
❌ 模块文件权限必须为可读(通常 root:root + 0644),否则 nginx -t 会提示 “Permission denied”。


















