一个用于开发调试后端服务的本地转发工具,基于 SOCKS5 代理,使用 Rust 编写,支持按 Host + 路径前缀转发和 HTTP 路径重写。
proxy-forward 是一个轻量级 SOCKS5 代理转发工具,主要面向本地开发和调试场景。
它监听本机 SOCKS5 代理端口,接收浏览器或客户端请求后,可根据配置规则:
- 匹配目标
Host:Port - 匹配请求 URL 的路径前缀
- 将请求转发到指定的目标地址
- 支持将原始路径前缀重写为目标路径前缀
特别适合与浏览器代理插件(如 ZeroOmega)配合使用,实现本地请求分流、接口调试、跨域开发等。
- 支持 SOCKS5 代理协议
- 自动生成默认
config.toml - 支持按
Host+path_prefix转发 - 支持 HTTP 请求路径重写
- 转发失败时可配置是否继续使用原始目标
- 克隆项目或进入仓库目录:
cd /run/media/serenity/iData/Serenity/project/i/rust/proxy-forward- 使用 Cargo 编译并运行:
cargo run --release- 默认监听地址:
127.0.0.1:1080
运行时,如果当前目录下不存在 config.toml,程序会自动生成默认配置文件。
配置文件位于项目根目录 config.toml,格式示例:
listen_addr = "127.0.0.1:1080"
[[rules]]
[rules.matcher]
addr = "192.168.120.177:81"
path_prefix = "/api"
[rules.forward]
addr = "127.0.0.1:8686"
path_prefix = ""字段说明:
listen_addr:本地 SOCKS5 监听地址rules.matcher.addr:待匹配的目标Host:Port,也支持*匹配所有rules.matcher.path_prefix:需要匹配的请求路径前缀rules.forward.addr:将流量转发到的目标地址rules.forward.path_prefix:转发时替换原路径前缀的目标前缀
例如:
- 原请求
http://192.168.120.177:81/api/users - 转发目标
127.0.0.1:8686 - 重写后路径:
http://127.0.0.1:8686/users
- 在 Chrome/Edge 等 Chromium 浏览器中,打开扩展商店。
- 搜索并安装
ZeroOmega插件。 - 启用插件后,进入插件的代理设置页面。
在 ZeroOmega 中配置 SOCKS5 代理,指向本地 proxy-forward 监听地址:
- 代理类型:
SOCKS5 - 地址:
127.0.0.1 - 端口:
1080
如果 ZeroOmega 允许直接填写代理字符串,也可以使用:
socks5://127.0.0.1:1080
ZeroOmega 支持根据 URL/Host 选择代理规则。推荐以下两种方式:
-
全局代理模式
将浏览器所有请求都走
proxy-forward,再由config.toml进行后端分流。 -
分域名或自定义规则模式
在 ZeroOmega 中只把目标调试域名或接口域名设置为走代理,其余请求直连。
示例规则:
# ZeroOmega 规则示例
# 仅将目标后端接口请求走代理
http://192.168.120.177/* => SOCKS5
https://api.example.com/* => SOCKS5
如果你需要测试本地转发接口,可以在 ZeroOmega 中设置:
http://192.168.120.177/* => SOCKS5
然后程序会根据 config.toml 中的转发规则,将请求转发到本地调试后端。
- 启动
proxy-forward - 打开 ZeroOmega,启用
SOCKS5代理指向127.0.0.1:1080 - 在 ZeroOmega 中添加需要代理的 URL/Host 规则
- 访问浏览器中的接口地址,检查是否按配置转发
- 浏览器访问:
http://192.168.120.177:81/api/test proxy-forward转发到:http://127.0.0.1:8686/test
在 config.toml 中添加多个规则:
[[rules]]
[rules.matcher]
addr = "api.example.com:80"
path_prefix = "/service"
[rules.forward]
addr = "127.0.0.1:8080"
path_prefix = "/"
[[rules]]
[rules.matcher]
addr = "*"
path_prefix = "/static"
[rules.forward]
addr = "127.0.0.1:8090"
path_prefix = "/assets"这样即可实现针对不同 Host 或路径前缀的灵活转发。
Cargo.toml- 项目依赖和构建配置config.toml- 默认运行时配置文件src/main.rs- 程序入口和监听逻辑src/core/config.rs- 配置加载和默认配置生成src/core/socks.rs- SOCKS5 协议处理src/core/http.rs- HTTP 解析与路径重写src/core/route.rs- 路由匹配和转发规则src/libs/logs.rs- 日志初始化
本项目采用 MIT 许可证。欢迎 fork、改进和贡献。