proxy-go 简单的不同路径代理服务项目介绍,部署方法和更新日志

  1. 新建一个config.json, 放在项目路径/data里, 内容如下:
  1. 在项目路径新建一个docker-compose.yml, 内容如下:
  1. nginx反代3334端口即可, 推荐配置:
location ^~ / {
    proxy_pass http://localhost:3334; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
    proxy_buffering off; 
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2|jpeg|webp|avif)$" ) {
        expires 30d; 
    }
    proxy_ignore_headers Set-Cookie Cache-Control expires; 
    proxy_cache proxy_cache_panel; 
    proxy_cache_key $host$uri$is_args$args$http_accept;
    proxy_cache_valid 200 304 301 302 10m; 
}

主要添加了根据accept来进行不同的缓存, 适配了Cloudflare Images的自适应提供图片.

2024.10.31更新

新增cdnjs和jsdelivr等代理, 也可以用于unpkg, 单独一个代理方法.

国内js代理只有字节比较稳定了, 但是字节的太久没更新, 有些新的库没有, 不如自己直接代理, 更方便也更快.

2024.11.17更新

支持根据不同的文件回源不同的地址

适配cloudflare images的图片优化, 支持format=auto

相关想法来自:

2024.11.30更新

性能优化

使用统一的HTTP连接池

监控系统

  • 主要实现了带认证的监控系统:
  • config.json文件添加相关密码
  • 新增认证管理器
  • 新增监控指标:
  • 监控页面路由:

访问流程:

  • 访问 /metrics/ui 显示登录页面

  • 输入密码,调用 /metrics/auth 获取token

  • 使用token访问 /metrics/dashboard 查看监控面板

  • 监控面板每5秒自动刷新数据

  • token存储在localStorage,24小时有效

  • 监控指标包括:

  • 基础指标:运行时间、请求数、错误率等

  • 系统指标:内存使用、goroutine数等

  • 性能指标:响应时间、吞吐量等

  • 路径统计:Top 10访问路径

  • 最近请求:最近1000个请求的详细信息

性能考虑:

  • 使用原子操作而不是锁

  • 使用对象池复用缓冲区

  • 异步清理过期token

  • 固定大小的环形缓冲区

  • 按需计算统计数据

使用方式:

功能作用

主要是最好有一台国外服务器, 回国又不慢的, 类似我买的绿云日本1111 IIJ服务器, 香港服务器也很好, 可以反代国外资源, 然后在proxy-go外面套个cloudfront或者Edgeone, 方便国内访问.

config里MAP的功能

目前我的主要使用是反代B2, R2, Oracle存储桶之类的. 也可以反代网站静态资源, 可以一并在CDN环节做缓存.

根据config示例作示范

  1. 访问https://proxy-go/path1/123.jpg, 实际是访问 https://path1.com/path/path/path/123.jpg
  2. 访问https://proxy-go/path2/749.movie, 实际是访问https://path2.com/749.movie

config里FixedPaths的功能

适合自己反代cdnjs和jsdelivr等, 可以在proxy-go前面套CDN

比如需要引用

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.5.12/vue.global.min.js"  crossorigin="anonymous" referrerpolicy="no-referrer"></script>

代理后把链接改成这样使用

https://proxy-go/cdnjs/ajax/libs/vue/3.5.12/vue.global.min.js

就是把https://cdnjs.cloudflare.com改成https://proxy-go/cdnjs就可以了, 类似南方大学的反代.

jsdelivr也类似

mirror 固定路由

比较适合接口类的CORS问题

访问https://proxy-go/mirror/https://example.com/path/to/resource

会实际访问https://example.com/path/to/resource

2024.12.03更新

  1. config.json里支持配置分流文件大小, 使用两种方式获取文件大小, 并进行信息缓存以优化性能, 小文件可以不经过单独路由处理;
  2. 指标管理使用sqlite进行数据持久化
  3. 指标管理页面支持历史数据查看
  4. 指标监控支持飞书webhook机器人通知异常状态
    异常状态的相关配置在internal\constants\constants.go, 可以通过config.json进行覆盖

    在5分钟一次,监控12次. 在15分钟内达到以下要求告警:
    1. 请求数高于10并且错误率达到50%了(因为爬虫有时候抓过期文件, 所以设置的高了一点)
    2. 平均传输速率低于设置的阈值