我已经将 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
123456
pdf 文件在哪里(保存时没有扩大)(*)。
如何在不改变目录结构的情况下返回所有文件?
(*) 请不要责怪我:这是一个过于简单的例子,在现实世界中,我没有文件,但有代理请求,其中唯一已知的东西是资源 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 中的变化。