Http代理

Http代理

上个公司经常有一种需求:有些服务部署在内网(内网无法访问互联网),但是同时又需要访问一些我们需要的第三方服务,最开始我们采用的方式是对每个需要访问的外网单独申请外网权限。如果项目的机房权限管理严格审批繁琐的话,这个流程会变得很长。

后来发现其实java的启动参数可以直接添加代理参数:

-Dhttp.proxyHost=172.20.6.4 -Dhttp.proxyPort=7777 -Dhttps.proxyHost=172.20.6.4 -Dhttps.proxyPort=7777 -Dhttp.nonProxyHosts="172.20.6.*" -Dhttps.nonProxyHosts="172.20.6.*"

这段的意思是http和https流量都经过 172.20.6.4 的 7777 端口代理出去,然后忽略 172.20.6.* 的地址,这个地址可以写多个。这个代理我们通常用的都是 goproxy :
snail007/goproxy: 🔥 Proxy is a high performance HTTP(S) proxies, SOCKS5 proxies,WEBSOCKET, TCP, UDP proxy server implemented by golang. Now, it supports chain-style proxies,nat forwarding in different lan,TCP/UDP port forwarding, SSH forwarding.Proxy是golang实现的高性能http,https,websocket,tcp,socks5代理服务器,支持内网穿透,链式代理,通讯加密,智能HTTP,SOCKS5代理,黑白名单,限速,限流量,限连接数,跨平台,KCP支持,认证API。

某次我在处理自己的服务时,需要在国内网络访问国外的某个服务,所以我就想在国外的某个服务器部署一下简单的 http 代理,但是这样就需要把我的代理服务暴露在公网,因此需要加一层认证服务。查了一下 goproxy 本身其实是支持认证的,但是属于付费模块,而我不想为这个简单的个人需求付费,因此只能自己尝试解决。

在分析了需求以及参考了很多已有的项目之后,在chatgpt的帮助下实现了简单的http代理,目前支持安装为服务、服务的启动关闭以及重启、密码认证、请求方ip白名单、目标地址白名单等,详细信息可查看项目的说明文档:

https://github.com/vacuityv/vacproxy

主要配置如下:

name: vacproxy

bind: 0.0.0.0:7777

# 日志配置/log file config,默认在当前目录的vacproxy.log
#log: /Users/vacuity/log/vacproxy.log

# 代理鉴权配置,enabled为true且user和password均不为空代表鉴权
auth:
  enabled: false
  user: test
  password: 1234

# 请求ip白名单,放空代表不限制
inAllowList:
#  - 127.0.0.1
#  - 192.168.100.*

# 目标域名/ip白名单,放空代表不限制
outAllowList:
#  - weixin.qq.com
#  - alipay.com
#  - baidu.com

目前已经在个人项目使用了一段时间,运行良好。