抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

OSS 流量费太贵,杜老师自建 MinIO,但 MinIO 不支持图片处理,找了一圈发现了 imgproxy,借此对接 MinIO 可实现图片处理。imgproxy 是一个快速安全的独立服务器,用于调整图像大小、处理、转换图像。

介绍

imgproxy 能够快速轻松地动态调整图像大小,且它装备精良,可处理大量的图像大小调整。

imgproxy 是 Web 应用程序中所有图像大小调整代码的快速及安全的替代品。

它也是处理来自远程源的图像不可或缺的工具。

使用 imgproxy 则无需在每次更改时都重复准备图像以适合设计。

特点

速度:

  1. imgproxy 利用了可能是目前最有效的图像处理库。它的速度很快,且内存占用非常低;
  2. imgproxy 使用 Go 的原生包在处理请求时省略任何开销,并且提供最好的 HTTP 支持。

安全:

  1. imgproxy 使用签名保护图像 URL,因此攻击者无法通过请求多次调整图像大小来实施拒绝服务攻击;
  2. imgproxy 支持通过 HTTP 标头进行授权,这可防止攻击者直接使用 imgproxy,但允许通过 CDN 或者缓存服务器使用它。

安装

将下面的内容保存为 docker-compose.yml,并执行 docker compose up -d 启用服务:

1
2
3
4
5
6
7
8
9
10
11
12
services:
imgproxy:
image: darthsim/imgproxy:latest
ports:
- "8080:8080"
environment:
- IMGPROXY_USE_S3=true
- AWS_ACCESS_KEY_ID=my_access_key
- AWS_SECRET_ACCESS_KEY=my_secret_key
- IMGPROXY_S3_REGION=us-west-1
- IMGPROXY_S3_ENDPOINT=
- IMGPROXY_S3_MULTI_REGION=true

针对配置文件内的参数说明如下:

参数 说明
IMGPROXY_USE_S3 是否要启用 S3
AWS_ACCESS_KEY_ID S3 的访问密钥
AWS_SECRET_ACCESS_KEY S3 的访问密钥
IMGPROXY_S3_REGION S3 的区域
IMGPROXY_S3_ENDPOINT S3 的端点
IMGPROXY_S3_MULTI_REGION 是否要开启多区域

水印

如需开启水印功能,则将以下环境变量添加至 docker-compose.yml

参数 说明
IMGPROXY_WATERMARK_DATA Base64 编码的图像数据,可以使用 base64 watermark.webp
IMGPROXY_WATERMARK_PATH 本地存储映像路径。
IMGPROXY_WATERMARK_URL 水印图片网址。
IMGPROXY_WATERMARK_OPACITY 水印的透明度。

用以下格式构建请求 URL,将相关参数替换为实际的值:

1
<imgproxy_base_url>?url=<MinIO_storage_url>/<image_path>&watermark=<watermark_image_path>

针对上面相关参数解释如下:

参数 说明 举例
是 imgproxy 的基础 URL http://your_domain/imgproxy/
是 MinIO 存储的 URL http://minio_host:9000/
要添加水印的原始图片在 MinIO 中的路径 bucketname/objectname.jpg
是水印图片的路径 watermark.png

例如,如果 imgproxy 基础 URL 是 http://example.com/imgproxy/,MinIO 存储 URL 是 http://minio.example.com/,要添加水印的图片在 MinIO 中的路径是 mybucket/myimage.jpg,水印图片路径是 watermark.png,那么完整请求 URL 可能是:

1
http://example.com/imgproxy/?url=http://minio.example.com/mybucket/myimage.jpg&watermark=watermark.png

评论