OSS 流量费太贵,杜老师自建 MinIO,但 MinIO 不支持图片处理,找了一圈发现了 imgproxy,借此对接 MinIO 可实现图片处理。imgproxy 是一个快速安全的独立服务器,用于调整图像大小、处理、转换图像。
介绍
imgproxy 能够快速轻松地动态调整图像大小,且它装备精良,可处理大量的图像大小调整。
imgproxy 是 Web 应用程序中所有图像大小调整代码的快速及安全的替代品。
它也是处理来自远程源的图像不可或缺的工具。
使用 imgproxy 则无需在每次更改时都重复准备图像以适合设计。
特点
速度:
- imgproxy 利用了可能是目前最有效的图像处理库。它的速度很快,且内存占用非常低;
- imgproxy 使用 Go 的原生包在处理请求时省略任何开销,并且提供最好的 HTTP 支持。
安全:
- imgproxy 使用签名保护图像 URL,因此攻击者无法通过请求多次调整图像大小来实施拒绝服务攻击;
- imgproxy 支持通过 HTTP 标头进行授权,这可防止攻击者直接使用 imgproxy,但允许通过 CDN 或者缓存服务器使用它。
安装
将下面的内容保存为 docker-compose.yml
,并执行 docker compose up -d
启用服务:
1 | services: |
针对配置文件内的参数说明如下:
参数 | 说明 |
---|---|
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_base_url> | 是 imgproxy 的基础 URL | http://your_domain/imgproxy/ |
<MinIO_storage_url> | 是 MinIO 存储的 URL | http://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 |
条评论