使用 image_filter 返回图像和非图像文件

使用 image_filter 返回图像和非图像文件

我已经将 nginx 配置为image_filter请求

server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;

    location / {
        index index.html;
        image_filter_buffer 20M;
        image_filter_jpeg_quality 75; # Desired JPG quality
        image_filter_interlace on; # For progressive JPG
        image_filter resize $arg_width $arg_height;
        try_files $uri $uri/ =404;
    }
}

但该位置同时包含图像和其他文件(例如 pdf、html 等)。当然,415当请求非图像内容时,image_filter 会返回,例如:

curl http://localhost/123456

123456pdf 文件在哪里(保存时没有扩大)(*)。

如何在不改变目录结构的情况下返回所有文件?

(*) 请不要责怪我:这是一个过于简单的例子,在现实世界中,我没有文件,但有代理请求,其中唯一已知的东西是资源 ID:没有扩展名,没有文件类型,什么都没有。实际配置是:

location ~ /api/receipt-files/content/(.*)?$ {
    error_page 404 /empty-receipt.png;
    image_filter_buffer 20M;
    image_filter_jpeg_quality 75; # Desired JPG quality
    image_filter_interlace on; # For progressive JPG
    proxy_pass http://localhost:8080/api/receipt-files/content/$1?$args;
    image_filter resize $arg_width $arg_height;
}

这对于图像来说非常有效,但是失败了415例如当/api/receipt-files/content返回一个时appplication/pdf

答案1

image_filter正则表达式限制location为仅匹配具有图像扩展名的文件。例如:

location ~ \.(jpg|gif|png|webp)$ {
    ....
}

答案2

到目前为止发现的唯一解决方法是修改前端,以便非图像请求通过location没有 的路由image_filter

我不太喜欢这个解决方案,因为它依赖于 html 中的变化。

相关内容