为什么会有这个项目?
作者使用Obsidian笔记软件后发现markdown访问图片不支持腾讯云COS图床认证操作,又考虑到了隐私问题,作者将图片资源上传到腾讯云COS,并使用COS HTTP Proxy进行代理,根据配置的域名去拦截请求,调用腾讯云COS SDK生成预签名后访问,从而达到保护图片隐私问题。
使用基于COS-HTTP-Proxy代理访问
使用浏览器不走代理访问
PS:不支持HTTPS协议
如果遇到问题,欢迎提issue
以下为AI总结的项目描述
——————————————————————我是一条分割线——————————————————————
COS HTTP Proxy是一个基于Netty的高性能HTTP代理服务器,特别优化了图片资源代理功能,并集成了腾讯云对象存储(COS)服务。该代理服务器支持HTTP和HTTPS请求转发,提供连接池管理、访问日志记录、健康检查等企业级功能。
- HTTP/HTTPS代理转发:支持标准HTTP请求和HTTPS隧道代理
- 图片代理服务:针对白名单域名的图片资源进行特殊处理
- 腾讯云COS集成:可将图片资源代理到腾讯云对象存储
- SSL解密与处理:对特定域名的HTTPS流量进行SSL终止和解密处理
- 连接池管理:高效的连接复用机制,减少连接建立开销
- 灵活的配置管理:支持通过application.conf文件进行详细配置
- 全面的访问日志:记录所有代理请求的详细信息
- 健康检查接口:提供代理服务运行状态监控
- 流量统计功能:实时跟踪请求数、活跃连接数等指标
- 可扩展的过滤器机制:支持请求/响应过滤和修改
- 异常处理与错误响应:统一的异常处理流程和友好的错误响应
- Java 11+:核心开发语言
- Netty 4.1.x:高性能异步网络应用框架
- 腾讯云COS SDK:对象存储服务集成
- Typesafe Config:配置管理
- Logback + SLF4J:日志框架
- Caffeine:高性能缓存库
- Maven:项目构建与依赖管理
- JDK 11或更高版本
- Maven 3.6或更高版本
# 克隆项目
git clone <项目URL>
cd cos-http-proxy
# 编译项目
mvn clean package -DskipTests
# 运行项目
java -jar target/cos-http-proxy-1.0-SNAPSHOT.jar或者使用提供的启动脚本:
# Windows系统
start_proxy.bat在运行前,请修改src/main/resources/application.conf文件中的配置:
# 代理服务配置
proxy {
port = 17890 # 监听端口
connect-timeout = 5000 # 连接超时
read-write-timeout = 10000 # 读写超时
worker-threads = 0 # 0表示使用CPU核心数
}
# 图片代理配置
image-proxy {
domain-whitelist = ["*.myqcloud.com*", "images.example.org"] # 图片域名白名单
image-extensions = ["jpg", "jpeg", "png", "gif", "webp", "bmp", "svg", "ico"]
}
# 腾讯云COS配置
cos {
secret-id = "your-secret-id" # 腾讯云API密钥
secret-key = "your-secret-key"
}# 使用curl测试代理
curl -x 127.0.0.1:17890 http://www.example.com
# HTTPS请求
curl -x 127.0.0.1:17890 https://www.example.com在浏览器的网络设置中,配置代理服务器地址为127.0.0.1,端口为17890。
代理服务器提供了健康检查接口,可以通过以下方式访问:
curl http://127.0.0.1:17890/healthsrc/
├── main/
│ ├── java/com/yuews/proxy/ # 源代码目录
│ │ ├── Application.java # 应用入口
│ │ ├── config/ # 配置相关
│ │ ├── cos/ # COS相关功能
│ │ ├── filter/ # 过滤器
│ │ ├── handler/ # 网络处理器
│ │ ├── health/ # 健康检查
│ │ ├── logging/ # 日志记录
│ │ ├── pool/ # 连接池
│ │ ├── server/ # 服务器实现
│ │ └── service/ # 业务服务
│ └── resources/ # 资源文件
│ ├── application.conf # 主配置文件
│ └── logback.xml # 日志配置
└── test/ # 测试代码
核心服务器组件,负责初始化Netty服务器、配置处理器链、管理连接池等。
处理HTTP请求和HTTPS CONNECT隧道,实现请求转发逻辑和图片代理路由。
处理图片请求的专用处理器,支持从白名单域名获取图片并转发到COS。
管理腾讯云COS客户端,提供对象上传、下载和URL生成功能。
连接池管理,实现高效的TCP连接复用,减少连接建立的开销。
访问日志记录器,记录所有代理请求的详细信息,支持异步写入。
- 安全配置:在生产环境中,请确保修改默认的API密钥和配置参数
- 内存管理:根据预期的并发请求量调整连接池大小和JVM参数
- 日志级别:生产环境建议将日志级别设置为INFO或WARN
- HTTPS处理:SSL解密功能需要谨慎使用,确保只对受信任的域名进行解密
- 检查端口是否被占用
- 验证JDK版本是否符合要求
- 查看日志文件中的错误信息
- 确认SSL证书配置是否正确
- 检查目标服务器是否支持HTTPS
- 查看是否存在防火墙限制
- 验证域名是否在白名单中
- 检查文件扩展名是否符合配置
- 确认COS配置是否正确
- 实现
HttpRequestFilter或HttpResponseFilter接口 - 在
FilterManager中注册过滤器 - 设置合适的优先级顺序
可以通过继承ImageProxyService或修改ImageProxyHandler来扩展图片处理功能。
- 根据服务器CPU核心数调整工作线程数
- 优化连接池配置以适应预期的并发量
- 使用适当的JVM参数进行内存优化
- 启用压缩以减少传输数据量
MIT License
如有问题或建议,请联系项目维护者yueweishang.fk@qq.com。