- 在ImageProxy中添加了域名白名单配置,支持精确和子域名匹配,增强安全性。 - 实现了日志文件的自动清理和轮转功能,限制日志文件大小、保留时间和数量,优化日志管理。 - 更新README文档,详细说明了新功能和配置方法。
138 lines
3.7 KiB
Markdown
138 lines
3.7 KiB
Markdown
# 图片代理与缓存系统
|
||
|
||
这是一个用于代理和缓存远程图片的系统,主要功能包括:
|
||
|
||
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;
|
||
}
|
||
}
|
||
``` |