Skip to content

yuews2002/cos-http-proxy

Repository files navigation

COS HTTP Proxy

写在前面

为什么会有这个项目?
作者使用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"
}

使用方法

作为HTTP代理使用

# 使用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/health

目录结构

src/
├── main/
│   ├── java/com/yuews/proxy/  # 源代码目录
│   │   ├── Application.java    # 应用入口
│   │   ├── config/            # 配置相关
│   │   ├── cos/               # COS相关功能
│   │   ├── filter/            # 过滤器
│   │   ├── handler/           # 网络处理器
│   │   ├── health/            # 健康检查
│   │   ├── logging/           # 日志记录
│   │   ├── pool/              # 连接池
│   │   ├── server/            # 服务器实现
│   │   └── service/           # 业务服务
│   └── resources/             # 资源文件
│       ├── application.conf   # 主配置文件
│       └── logback.xml        # 日志配置
└── test/                      # 测试代码

核心组件介绍

HttpProxyServer

核心服务器组件,负责初始化Netty服务器、配置处理器链、管理连接池等。

HttpProxyHandler

处理HTTP请求和HTTPS CONNECT隧道,实现请求转发逻辑和图片代理路由。

ImageProxyHandler

处理图片请求的专用处理器,支持从白名单域名获取图片并转发到COS。

CosClientManager

管理腾讯云COS客户端,提供对象上传、下载和URL生成功能。

ConnectionPoolManager

连接池管理,实现高效的TCP连接复用,减少连接建立的开销。

AccessLogger

访问日志记录器,记录所有代理请求的详细信息,支持异步写入。

注意事项

  1. 安全配置:在生产环境中,请确保修改默认的API密钥和配置参数
  2. 内存管理:根据预期的并发请求量调整连接池大小和JVM参数
  3. 日志级别:生产环境建议将日志级别设置为INFO或WARN
  4. HTTPS处理:SSL解密功能需要谨慎使用,确保只对受信任的域名进行解密

常见问题

代理服务器无法启动

  • 检查端口是否被占用
  • 验证JDK版本是否符合要求
  • 查看日志文件中的错误信息

HTTPS请求失败

  • 确认SSL证书配置是否正确
  • 检查目标服务器是否支持HTTPS
  • 查看是否存在防火墙限制

图片代理功能不生效

  • 验证域名是否在白名单中
  • 检查文件扩展名是否符合配置
  • 确认COS配置是否正确

开发指南

添加自定义过滤器

  1. 实现HttpRequestFilterHttpResponseFilter接口
  2. FilterManager中注册过滤器
  3. 设置合适的优先级顺序

扩展图片处理功能

可以通过继承ImageProxyService或修改ImageProxyHandler来扩展图片处理功能。

性能优化建议

  1. 根据服务器CPU核心数调整工作线程数
  2. 优化连接池配置以适应预期的并发量
  3. 使用适当的JVM参数进行内存优化
  4. 启用压缩以减少传输数据量

许可证

MIT License

联系方式

如有问题或建议,请联系项目维护者yueweishang.fk@qq.com

About

腾讯云COS图片资源代理访问

Resources

License

Stars

Watchers

Forks

Packages

No packages published