编译安装Nginx 1.18未使用配置模块路径问题求助
问题分析
你通过源码编译Nginx 1.18时指定了--modules-path=/usr/lib/nginx/modules,但启动时Nginx仍去/usr/modules查找模块,核心原因是:
- Nginx加载模块时,若配置中使用相对路径(如
load_module ndk_http_module.so;),会默认基于编译时指定的--prefix目录解析路径。 - 你编译时的
--prefix大概率是/usr(或默认未修改导致Nginx将相对路径解析为/usr/modules),而--modules-path仅指定模块的安装目录,不会改变Nginx加载模块时的默认搜索路径。 - Ubuntu仓库的Debian包版本在编译时做了定制化处理,调整了模块搜索路径与配置文件的路径适配,因此不存在此问题。
解决方案
以下三种方法任选其一即可:
方法1:修改模块配置文件为绝对路径
直接修改/etc/nginx/modules-enabled/下所有配置文件中的模块路径,将相对路径替换为绝对路径:
# 原配置 load_module ndk_http_module.so; # 修改后 load_module /usr/lib/nginx/modules/ndk_http_module.so;
方法2:创建软链接映射模块路径
将/usr/lib/nginx/modules下的模块软链接到Nginx默认搜索的/usr/modules目录:
mkdir -p /usr/modules ln -s /usr/lib/nginx/modules/*.so /usr/modules/
执行后重启Nginx即可生效。
方法3:重新编译Nginx调整prefix路径
重新编译时同时指定--prefix=/usr/lib/nginx与--modules-path=/usr/lib/nginx/modules,让Nginx的默认模块搜索路径与你指定的模块安装路径一致:
# 进入Nginx源码目录 cd nginx-1.18.0 # 重新配置编译参数 ./configure --prefix=/usr/lib/nginx --modules-path=/usr/lib/nginx/modules [其他你需要的编译参数] # 编译安装 make && make install
之后配置文件中使用相对路径加载模块即可正常识别。
内容的提问来源于stack exchange,提问作者Larry Martell
相关产品推荐
相关产品推荐

