NGINX load_module加载报错 如何通过include文件正确加载模块
问题原因
load_module指令的作用是直接加载Nginx的动态模块二进制文件(后缀为.so),你当前的配置第一行错误地将.conf配置文件路径传给了该指令,因此Nginx尝试把文本类型的conf文件当成二进制so文件加载,自然触发dlopen() failed、file too short报错。- 你本地的
50-mod-http-image-filter.conf本身是存放模块加载配置的文本文件,应该用include指令引入,而不是load_module。
正确配置方案
方案1:直接引入模块配置文件(适配Debian/Ubuntu系默认模块管理逻辑,操作最简单)
直接把第一行的load_module改成include即可,修改后的完整配置参考如下:
include /etc/nginx/modules-enabled/50-mod-http-image-filter.conf; include load_modules.include; # the upstream component nginx needs to connect to http { upstream educa { server unix:///tmp/educa.sock; } server { listen 80; server_name www.educaproject.com educaproject.com; access_log off; error_log /home/anton/Course-system/educa/config/logs/nginx_error.log; location / { include /etc/nginx/uwsgi_params; uwsgi_pass educa; } } }
说明:Debian/Ubuntu系统默认把已启用的模块配置都放在/etc/nginx/modules-enabled/目录下,每个conf文件里已经写好了正确的load_module指向对应so文件的规则,直接include就可以完成模块加载。
方案2:直接加载二进制模块文件
如果你不想引入额外的conf文件,也可以直接用load_module指向对应的.so文件路径:
load_module modules/ngx_http_image_filter_module.so; include load_modules.include; # 后续http块配置保持不变
如果提示找不到so文件,可以替换为绝对路径,大部分系统默认的模块路径为/usr/lib/nginx/modules/ngx_http_image_filter_module.so,可根据你实际的模块安装位置调整。
配置验证
修改完成后先执行nginx -t测试配置语法是否正确,没有报错再执行nginx -s reload生效即可。
内容的提问来源于stack exchange,提问作者zeratul314
相关产品推荐
相关产品推荐

