一个桌面代理管理工具,提供现代化的基于 Web 的管理界面,用于管理 HTTP/HTTPS 、WebSocket 和 Stream ( TCP/UDP )反向代理。
SSLProxyManager 基于 Tauri 2 + Rust,提供管理界面(前端:Vue 3 + Vite + Element Plus),用于配置与管理:
HTTP/HTTPS 代理( rules/routes )
listen_addr / listen_addrs)Content-Type 过滤(content_types)proxy_pass_path 路径改写static_dir)set_headers)WebSocket 代理( ws_proxy )
ws_proxy_enabled(全局禁用时,WS 监听不会启动)Stream 代理( TCP/UDP ,stream )
listen_port 监听端口( TCP 或 UDP )proxy_pass 绑定 upstream 名称hash_key = "$remote_addr")proxy_connect_timeout / proxy_timeout(字符串形式,例:300s)访问控制
指标与监控
应用功能





src/:Rust 后端代码frontend/:前端项目( Vite )tauri.conf.json:Tauri 配置( dev/build 命令、devUrl 、frontendDist 等)config.toml:运行配置(开发模式下可放项目根目录)config.toml.example:配置示例cd frontend
npm install
在项目根目录执行:
npm run tauri:dev
该命令会根据 tauri.conf.json:
frontend 并执行 npm run devhttp://localhost:5173在项目根目录执行:
npm run tauri:build
该命令会:
frontend 并执行 npm run build(产物:frontend/dist)项目使用 TOML 进行配置。
config.toml,优先读取它。~/.config/SSLProxyManager/config.toml建议直接参考
config.toml.example。
[[rules]]:监听节点listen_addr:监听地址,例如 :8888 或 0.0.0.0:1024ssl_enable:是否启用 TLScert_file / key_file:证书与私钥路径basic_auth_enable / basic_auth_username / basic_auth_password[[rules.routes]]:路由path:Path 前缀匹配static_dir:静态目录(可选)proxy_pass_path:转发路径改写(可选)exclude_basic_auth:该路由是否跳过 Basic Auth (可选)follow_redirects:代理端是否跟随上游 30x (可选)[rules.routes.set_headers]:注入 Header (可选)[[rules.routes.upstreams]]:上游列表(可选)**ws_proxy_enabled**:WS 全局开关(默认 true)
false:不会启动 WS 监听(即使某条 ws rule enabled=true )true:再按每条 ws rule 的 enabled 生效[[ws_proxy]]:WS 监听规则列表
enabled:是否启用该规则listen_addr:监听地址,例如 0.0.0.0:8800ssl_enable:是否启用 TLS ( wss )cert_file / key_file:证书与私钥路径[[ws_proxy.routes]]path:Path 前缀upstream_url:上游 WS 地址,例如 ws://127.0.0.1:9000Stream 用于四层代理:监听一个 TCP/UDP 端口并转发到上游。
[stream]enabled:全局开关[[stream.upstreams]]name:upstream 名称(供 proxy_pass 引用)hash_key:默认 $remote_addr(按客户端 IP 稳定选择上游)consistent:当前作为配置项保留[[stream.upstreams.servers]]addr:host:portweight / max_fails / fail_timeout:字段保留(可在后续增强策略)[[stream.servers]]enabled:是否启用listen_port:监听端口udp:false=TCP ,true=UDPproxy_pass:引用 upstream 的 nameproxy_connect_timeout:例如 300sproxy_timeout:例如 600s你可以用下面的 Nginx stream 配置理解对应关系:
stream {
upstream sendimage {
hash $remote_addr consistent;
server 59.xx.xx.xx:8089 max_fails=1 fail_timeout=30s;
}
server {
listen 50002;
proxy_pass sendimage;
proxy_connect_timeout 300s;
proxy_timeout 600s;
}
}
在本项目中等价配置可参考 config.toml.example 的 [stream] 片段。
ws_proxy_enabled:全局启用/禁用 WebSocket 代理(默认 true)http_access_control_enabled:启用 HTTP 访问控制(默认 true)ws_access_control_enabled:启用 WebSocket 访问控制(默认 false)stream_access_control_enabled:启用 Stream 代理访问控制(默认 true)allow_all_lan:允许所有局域网 IP (默认 true)auto_start:应用启动时自动启动代理服务(默认 true)show_realtime_logs:在 UI 中显示实时日志(默认 false)realtime_logs_only_errors:实时日志视图仅显示错误(默认 false)stream_proxy:遗留字段(请使用 [stream].enabled 代替)max_body_size:最大请求体大小(字节,默认 10485760 = 10MB )max_response_body_size:最大响应体大小(字节,默认 10485760 = 10MB )upstream_connect_timeout_ms:上游连接超时(毫秒,默认 5000)upstream_read_timeout_ms:上游读取超时(毫秒,默认 30000)upstream_pool_max_idle:连接池最大空闲连接数(默认 100)upstream_pool_idle_timeout_sec:空闲连接超时(秒,默认 60)enable_http2:启用 HTTP/2 支持(默认 false)[[whitelist]]:IP 白名单条目ip:IP 地址或 CIDR 表示法(例如:127.0.0.1 或 192.168.1.0/24)[metrics_storage]:指标存储配置enabled:启用指标存储(默认 true)db_path:SQLite 数据库文件路径(例如:/path/to/metrics.db)[update]:自动更新配置enabled:启用更新检查(默认 true)server_url:更新服务器 URL (为空则使用默认)auto_check:自动检查更新(默认 true)timeout_ms:更新检查超时(毫秒,默认 10000)ignore_prerelease:忽略预发布版本(默认 true)应用程序提供了全面的基于 Web 的管理界面:
Q: 前端开发服务器使用什么端口?
A: 默认端口是 5173(见 tauri.conf.json 的 devUrl)。
Q: 如何更改前端 dev/build 命令?
A: 修改根目录 tauri.conf.json 的 build.beforeDevCommand / build.beforeBuildCommand。
Q: 配置文件位于哪里?
A: 开发模式下,如果项目根目录存在 config.toml,则优先读取。生产模式( Linux )下,默认位置是 ~/.config/SSLProxyManager/config.toml。
Q: 如何启用系统启动时自动运行?
A: 在 config.toml 中设置 auto_start = true,应用启动时会自动启动代理服务。
Q: 可以将应用隐藏到系统托盘吗?
A: 可以,点击关闭按钮会将窗口隐藏到系统托盘而不是退出。可以从托盘菜单退出。
Q: 如何查看历史指标?
A: 在配置中启用指标存储,然后在 UI 中使用"指标存储"标签页查询历史数据。
Q: 如何配置访问控制?
A: 使用"访问控制"标签页管理 IP 白名单/黑名单,或在 config.toml 中编辑 [[whitelist]] 条目。
本项目仅用于学习与合法合规的网络代理/反向代理配置管理场景。使用本软件可能涉及网络访问控制、证书管理、流量转发等操作,存在但不限于数据泄露、服务中断、配置错误导致安全风险等潜在风险。你在使用本项目时需自行评估并承担全部风险与责任。
如果你不同意上述条款,请勿使用、分发或基于本项目进行二次开发。
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
欢迎贡献!请随时提交 Pull Request 。
1
nickfox5880 3 天前
你好 能将某个线上请求代理到本地文件吗 类似抓包花瓶的那种
|
2
userff OP @nickfox5880 你好 是全局拦截某个请求然后修改请求体或响应体吧 目前没有这功能
|
3
nickfox5880 3 天前
@userff 对 类似 clarles 的 map local
|