抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)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_IDS3 的访问密钥
AWS_SECRET_ACCESS_KEYS3 的访问密钥
IMGPROXY_S3_REGIONS3 的区域
IMGPROXY_S3_ENDPOINTS3 的端点
IMGPROXY_S3_MULTI_REGION是否要开启多区域

水印

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

参数说明
IMGPROXY_WATERMARK_DATABase64 编码的图像数据,可以使用 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_base_url>是 imgproxy 的基础 URLhttp://your_domain/imgproxy/
<MinIO_storage_url>是 MinIO 存储的 URLhttp://minio_host:9000/
<image_path>要添加水印的原始图片在 MinIO 中的路径bucketname/objectname.jpg
<watermark_image_path>是水印图片的路径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

评论