Tuesday, May 26, 2026Tech HubAboutContactAdvertiseNewsletter
Back to Home
通过 OpenResty+ MinIO + weserv/images 搭建自己的阿里云OSS

通过 OpenResty+ MinIO + weserv/images 搭建自己的阿里云OSS

下面是一套可操作的方案,基于 OpenResty + MinIO + weserv/images 搭建一个可自托管、支持图片处理能力的“类阿里云 OSS” 服务。整体目标是: MinIO 作为对象存储(兼容 S3 API) OpenResty 提供反向代理、鉴权、图片处理网关 weserv/images 提供图片缩放、裁剪、格式转换等能力(类似阿里云 OSS 图片处理) 1. 安装 MinIO docker run -d --name minio \ -p 9000:9000 -p 9001:9001 \ -e...

B
Blizine Admin
·2 min read·0 views

通过 OpenResty+ MinIO + weserv/images 搭建自己的阿里云OSS

下面是一套可操作的方案,基于 OpenResty + MinIO + weserv/images 搭建一个可自托管、支持图片处理能力的“类阿里云 OSS” 服务。整体目标是:

MinIO 作为对象存储(兼容 S3 API)

OpenResty 提供反向代理、鉴权、图片处理网关

weserv/images 提供图片缩放、裁剪、格式转换等能力(类似阿里云 OSS 图片处理)

1. 安装 MinIO

docker run -d --name minio \ -p 9000:9000 -p 9001:9001 \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=admin123" \ minio/minio server /data --console-address ":9001"

访问 MinIO 控制台:

管理后台:http://localhost:9001

S3 接口:http://localhost:9000

2. 安装 weserv/images(图片处理服务)

weserv/images 本质是一个支持 URL 参数的图片处理服务器。

创建 Dockerfile 文件

FROM ghcr.io/weserv/images:5.x

RUN sed -i '/weserv_deny_ip/d' /etc/nginx/nginx.conf

构建并运行

docker build -t weserv/images . docker run -d -p 8080:80 --shm-size=1gb --name=weserv weserv/images

示例处理 URL:

http://localhost:8080?url=https://example.com/a.jpg&w=200&h=200

3. 安装 OpenResty

docker run -d --name openresty \ -p 80:80 \ -v /opt/openresty/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf \ openresty/openresty:latest

4. 配置 OpenResty 作为代理(核心 OSS 功能)

编辑文件:/opt/openresty/conf/nginx.conf

server { listen 80; server_name img.example.com;# minio

# 图片处理 location ~* \.(jpg|jpeg|png|gif|webp)$ {

set $upstream ""; rewrite_by_lua_block { local args = ngx.req.get_uri_args() local process = args["x-image-process"] if not process then -- 没有 x-image-process 参数,直接代理到 minio ngx.var.upstream = "http://127.0.0.1:9000" .. ngx.var.uri else -- 有 x-image-process 参数,直接代理到 weserv/images local new_query = process:gsub("_", "="):gsub(",", "&") ngx.var.upstream = "http://127.0.0.1:8080/?url=127.0.0.1:9000" .. ngx.var.uri .. "&" .. new_query end } proxy_pass $upstream; }

# 其他资源 location / { proxy_pass http://127.0.0.1:9000; } }

重启 OpenResty:

docker restart openresty

5. 测试访问

① 原图访问(MinIO) http://img.example.com/path/to/img.jpg

② 缩略图(weserv/images) http://img.example.com/path/to/img.jpg?x-image-process=w_100

内部转发到weserv/images处理 http://127.0.0.1:8080/?url=img.example.com/path/to/img.jpg&w=100

等同 OSS 的: ?x-oss-process=image/resize,w_100

📰Originally published at dev.to

Comments