mirror of
https://gh.wpcy.net/https://github.com/hochenggang/simple-php-s3-server.git
synced 2026-07-14 11:06:38 +08:00
2.9 KiB
2.9 KiB
PHP S3 兼容网关
一个轻量级的 PHP 实现的 S3 兼容对象存储服务器,使用本地文件系统作为存储后端。
功能特性
- S3 对象 API 兼容(PUT/GET/DELETE/HEAD)
- 分片上传支持(create/UploadPart/complete/abort)
- AWS Signature V4 签名认证
- 纯文件系统存储(无需数据库)
- 支持按密钥限制上传大小(KB)
- 支持按密钥限制存储桶访问
快速开始
- 上传到网站
将所有文件上传到网站根目录。
- 配置
编辑 .config.ini 文件:
; Access Keys configuration
; Format: [keys.{access_key_id}]
[keys.key1]
secret_key=your-secret-key1
allowed_buckets=bucket1,bucket2
file_max_size=10240
[keys.key2]
secret_key=your-secret-key2
allowed_buckets=bucket3
[keys.admin_key]
secret_key=admin-secret-key
- 开始使用
使用任何 S3 兼容客户端连接:
import boto3
s3 = boto3.client(
's3',
endpoint_url='https://your-domain.com',
aws_access_key_id='key1',
aws_secret_access_key='your-secret-key1',
region_name='us-east-1', # 可以填任意值
verify=True
)
# 上传文件
s3.upload_file('local.txt', 'bucket', 'remote.txt')
# 下载文件
s3.download_file('bucket', 'remote.txt', 'local.txt')
配置
配置存储在 .config.ini 文件中,使用 INI 格式:
| 变量 | 说明 | 默认值 |
|---|---|---|
DATA_DIR |
数据存储目录 | ../data |
APP_DEBUG |
应用调试模式 | false |
注意:DATA_DIR 目录不能与网关文件在同一目录下。建议将其放在父目录下,避免暴露存储目录。
访问密钥配置
访问密钥使用 keys.{access_key_id} 格式配置:
[keys.my_access_key]
secret_key=your-secret-key
allowed_buckets=bucket1,bucket2
file_max_size=10240
| 字段 | 必填 | 说明 |
|---|---|---|
secret_key |
是 | 认证密钥 |
allowed_buckets |
否 | 可访问的存储桶列表(逗号分隔),或 * 表示所有(默认:*) |
file_max_size |
否 | 最大上传大小(单位 KB),未设置则不限制 |
支持的操作
- 存储桶:列出、创建、删除
- 对象:上传、下载、获取元数据、删除、复制、列表
- 分片:创建、上传、完成、取消、列表
存储
对象存储在:../data/{bucket}/{key}
已知限制
不支持 MinIO 客户端
本网关不支持 Python 版本 MinIO 客户端。其会在 Authorization 头中插入换行符(\n),这违反了 HTTP 规范:
Authorization: AWS4-HMAC-SHA256 Credential=key/date/\n /s3/aws4_request, ...
这会导致 Apache 无法正常解析请求。LiteSpeed 可以正常处理。Nginx 未测试。
请使用 AWS CLI、boto3 或其他标准 S3 客户端。
许可证
MIT