NGINX 1.11.5配置image_filter指令提示未知指令问题求助
这个问题很典型——你虽然编译时通过--with-http_image_filter_module=dynamic启用了动态的图片过滤模块,但Nginx启动时并没有主动加载这个模块,所以才会抛出unknown directive "image_filter"的错误。动态模块和静态编译的模块不同,必须手动在配置中声明加载,具体解决步骤如下:
第一步:定位动态模块的.so文件
编译Nginx时生成的动态模块文件,默认存放在你编译源码的objs目录下,文件名是ngx_http_image_filter_module.so。你可以用以下命令快速查找:find / -name ngx_http_image_filter_module.so 2>/dev/null(
2>/dev/null是为了过滤掉权限不足的错误信息)第二步:在Nginx主配置中加载模块
打开Nginx的主配置文件(通常是/etc/nginx/nginx.conf,或者你自定义的安装路径下的配置文件),必须在配置的最顶部(events和http块之前)添加load_module指令,指定模块文件的绝对路径。示例如下:# 加载动态图片过滤模块 load_module /usr/local/nginx/objs/ngx_http_image_filter_module.so; events { # 你的events配置 } http { # 你的http配置 server { # 你的server配置 location ~ "^/media/(?<width>\d+)/(?<image>.+)$" { alias /var/www/images/$image; image_filter resize $width -; image_filter_jpeg_quality 75; image_filter_buffer 8M; } } }注意:
load_module指令不能放在http、server或location块内部,必须放在全局配置区域。第三步:验证配置并重启Nginx
先检查配置语法是否正确:nginx -t如果输出显示
nginx: configuration file /etc/nginx/nginx.conf test is successful,就可以安全重启Nginx了:nginx -s reload
如果操作后仍然报错,建议检查模块文件的权限(确保Nginx进程能读取该文件),或者重新确认编译时的参数是否正确(再次执行nginx -V查看编译参数,确认--with-http_image_filter_module=dynamic确实存在)。
内容的提问来源于stack exchange,提问作者DEK4

