← 返回文章列表

发布 Local Forward Proxy 0.1.0

一个带 Web 管理界面的本地 HTTP/HTTPS 转发代理,支持 hosts 管理、HTTPS 本地证书、域名改写、Cookie 处理和响应覆盖。

  • proxy
  • release
  • tool

我把最近写的本地代理工具整理成了一个可下载版本:Local Forward Proxy 0.1.0

这个工具的目标很直接:在本机把一个域名接管下来,然后转发到另一个上游站点,同时处理常见的域名、请求、响应、Cookie 和 HTTPS 证书问题。它适合本地调试、接口联调、页面兼容测试、临时响应覆盖,以及需要用真实域名路径复现问题的场景。

这版发布包已经包含 Docker 支持,可以直接用 docker compose up -d --build 启动。

下载

SHA256:

2c18fa07dc40528d63454f8bd56c8f29d88ea39d1dd5977dc9a9e34d247c8850  local-forward-proxy-0.1.0.zip
595ec9be47c042fd879a77dc0f37f17468044c726082d45033899abfaa0e505a  local-forward-proxy-0.1.0.tar.gz

发布包里没有包含本机生成的 CA 私钥、站点证书、实际配置、日志或 node_modules。首次运行时会在本地生成自己的配置和证书。

功能

  • Web 管理界面:http://127.0.0.1/_proxy-admin/
  • 按本地域名转发到不同上游目标,例如 demo.local -> https://example.com
  • 自动维护 /etc/hosts 中的托管块
  • 为配置域名签发本地 HTTPS 证书
  • 替换请求头、请求体、响应头、响应体里的目标域名
  • 支持 LocationSet-Cookie Domain、正文 URL 替换
  • 支持 Cookie 透传、合并、替换和额外请求/响应头
  • 支持按路径、Content-Type、状态码配置透传
  • 支持条件规则:按请求体关键词、上游状态码、响应正文或响应头命中后改状态码、改正文、加头
  • 支持 gb2312gbkgb18030 等旧编码页面正文替换,避免强制转成 UTF-8

安装

需要 Node.js 20 或更新版本。

tar -xzf local-forward-proxy-0.1.0.tar.gz
cd local-forward-proxy-0.1.0
npm ci

也可以用 zip 包:

unzip local-forward-proxy-0.1.0.zip
cd local-forward-proxy-0.1.0
npm ci

启动

正式使用时默认监听 80443。macOS 上低端口需要管理员权限:

sudo npm start

如果只是先试一下,不想占用低端口,可以使用开发端口:

npm run dev

开发端口:

HTTP 管理和代理: http://127.0.0.1:18080/_proxy-admin/
HTTPS 代理:      https://127.0.0.1:18443/

正式端口:

HTTP 管理和代理: http://127.0.0.1/_proxy-admin/
HTTPS 代理:      https://127.0.0.1/

Docker 部署

发布包里已经带了 Dockerfiledocker-compose.yml

tar -xzf local-forward-proxy-0.1.0.tar.gz
cd local-forward-proxy-0.1.0
docker compose up -d --build

默认映射:

HTTP 管理和代理: http://127.0.0.1/_proxy-admin/
HTTPS 代理:      https://127.0.0.1/
配置目录:        ./data -> /app/data
证书目录:        ./certs -> /app/certs

如果宿主机的 80443 已经被占用,可以把 docker-compose.yml 里的端口改成高位端口:

ports:
  - "18080:80"
  - "18443:443"

然后访问:

HTTP 管理和代理: http://127.0.0.1:18080/_proxy-admin/
HTTPS 代理:      https://127.0.0.1:18443/

Docker 模式有一个限制:容器不能直接修改宿主机的 /etc/hosts。管理界面会显示提示,不会假装写入成功。如果要让宿主机浏览器访问自定义域名,需要在宿主机手动加入 hosts 记录:

127.0.0.1    demo.local

信任本地 CA

首次启动会生成:

certs/local-proxy-ca.crt
certs/local-proxy-ca.key
certs/servers/

在 macOS 上可以把 CA 证书加入系统钥匙串:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain certs/local-proxy-ca.crt

也可以在管理界面下载 CA 证书后手动导入钥匙串,并设置为始终信任。

注意:这个 CA 只应该用于本地调试。不要把生成的 certs/local-proxy-ca.key 发给别人,也不要把它提交到公开仓库。

hosts 管理

管理界面可以写入 /etc/hosts,工具只维护自己的块:

# >>> local-forward-proxy
127.0.0.1    demo.local
# <<< local-forward-proxy

已有的 hosts 内容不会被整体覆盖。

一个最小例子

启动后打开管理界面,新建或修改一条规则:

本地域名: demo.local
转发目标: https://example.com
启用:     是

然后写入 hosts,访问:

http://demo.local/
https://demo.local/

请求会进入本地代理,再转发到上游目标。

验证

发布前我跑了两轮测试:

npm test

覆盖项包括:

  • 路径前缀映射
  • Cookie 合并
  • hosts 托管块生成
  • 请求体、响应头、响应体、Set-Cookie 替换
  • 上游状态码改写为 200
  • gb2312 响应体替换后保持原编码

发布包本身也重新解压后执行过:

npm ci
npm test

结果是 6 个测试全部通过。

Docker 镜像也验证过:

docker build -t local-forward-proxy:0.1.0 .
docker run -d -p 18080:80 -p 18443:443 local-forward-proxy:0.1.0

容器启动后,/_proxy-admin/api/status 会返回 docker: true,并提示 Docker 模式下 hosts 需要在宿主机处理。

适用场景

这个工具不是通用公网反代,也不是生产网关。它面向的是本地开发和调试:

  • 要用真实域名在浏览器里复现问题;
  • 要临时把某个域名转发到另一个站点;
  • 要验证 Cookie、Location、正文 URL 替换;
  • 要对上游响应做本地覆盖;
  • 要测试旧编码页面的替换逻辑;
  • 要在不改目标服务的情况下做本地联调。

如果只是想快速起一个普通 HTTP 代理,它可能偏重。如果你需要同时处理域名、HTTPS、hosts、Cookie 和响应改写,它会比较省事。