ImageProxy/README.md
Snowz 39d21d3a6a feat(ImageProxy): 添加域名白名单和日志管理功能
- 在ImageProxy中添加了域名白名单配置,支持精确和子域名匹配,增强安全性。
- 实现了日志文件的自动清理和轮转功能,限制日志文件大小、保留时间和数量,优化日志管理。
- 更新README文档,详细说明了新功能和配置方法。
2025-05-28 02:04:34 +08:00

138 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 图片代理与缓存系统
这是一个用于代理和缓存远程图片的系统,主要功能包括:
1. 图片代理通过URL参数获取远程图片并返回
2. 图片缓存:自动缓存已访问的图片,提高访问速度
3. 防盗链支持支持设置Referer解决部分网站的防盗链问题
## 使用方法
在浏览器中访问:
```
/index.php?url=https://example.com/image.jpg
```
使用伪静态后的访问方式:
```
/image/https://example.com/image.jpg
```
## 参数说明
- url: 必填参数需要代理的远程图片URL
## 技术特点
- 支持多种图片格式GIF、JPEG、PNG、WebP、BMP、SVG
- 自动创建缓存目录结构
- 支持HTTPS图片获取
- 自动处理重定向
- 合理的超时设置
- 完善的错误处理和日志记录
- 图片数据验证
- 缓存过期控制
## 安全特性
- 输入验证确保URL以http或https开头
- 文件类型验证:只允许特定图片格式
- 目录权限控制:缓存目录权限设置
- SSL验证支持HTTPS图片获取
- 图片数据验证:验证下载的图片数据是否有效
- 错误处理:完善的错误处理和日志记录
- 域名白名单:支持配置允许访问的域名列表,防止服务被滥用
## 性能优化
- 图片缓存机制24小时缓存
- 合理的超时设置
- 内存使用优化
- 并发处理能力
- 缓存控制头:支持浏览器缓存
## 文件说明
- `index.php`: 入口文件,处理请求
- `ImageProxy.php`: 核心类文件,实现图片代理和缓存功能
- `cache/`: 缓存目录
- `cache/logs/`: 日志目录
## 配置说明
可以通过修改`index.php`中的配置参数来调整系统行为:
```php
$proxy = new ImageProxy([
'cache_dir' => 'cache', // 缓存目录
'timeout' => 30, // 请求超时时间(秒)
'connect_timeout' => 15, // 连接超时时间(秒)
'max_redirects' => 5, // 最大重定向次数
'allowed_domains' => [ // 允许访问的域名白名单
'example.com',
'trusted-site.com',
'images.example.org'
// 添加更多允许的域名
]
]);
```
白名单配置说明:
- 如果 `allowed_domains` 为空数组,则允许访问所有域名
- 支持精确域名匹配(如 `example.com`
- 支持子域名匹配(如 `images.example.com` 会匹配 `example.com`
- 域名比较不区分大小写
- 不在白名单中的域名请求将被拒绝,并记录到日志中
## 错误处理
系统会自动记录所有错误到日志文件中,日志文件位于`cache/logs/`目录下,按日期命名。系统实现了自动日志轮转功能:
- 单个日志文件大小限制10MB
- 日志文件保留时间30天
- 最大保留日志文件数10个
- 自动清理过期日志
- 自动轮转超大日志文件
日志文件命名规则:
- 当前日志:`YYYY-MM-DD.log`
- 轮转后的日志:`YYYY-MM-DD.log.YYYY-MM-DD_HH-mm-ss`
## 注意事项
1. 确保服务器有足够的磁盘空间用于缓存
2. 确保缓存目录有写入权限
3. 建议定期清理缓存文件
4. 日志系统会自动管理日志文件大小和数量,无需手动干预
## 伪静态配置
### Apache 配置
在网站根目录创建或编辑 `.htaccess` 文件:
```apache
RewriteEngine On
RewriteBase /
# 图片代理伪静态规则
RewriteRule ^image/(.*)$ index.php?url=$1 [L,QSA]
# 禁止直接访问 index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php [NC]
RewriteRule ^ - [F]
```
### Nginx 配置
在网站配置文件中添加:
```nginx
location / {
# 图片代理伪静态规则
rewrite ^/image/(.*)$ /index.php?url=$1 last;
# 禁止直接访问 index.php
location = /index.php {
return 403;
}
}
```