发布 Local Forward Proxy 0.1.0
一个带 Web 管理界面的本地 HTTP/HTTPS 转发代理,支持 hosts 管理、HTTPS 本地证书、域名改写、Cookie 处理和响应覆盖。
我把最近写的本地代理工具整理成了一个可下载版本: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 证书
- 替换请求头、请求体、响应头、响应体里的目标域名
- 支持
Location、Set-Cookie Domain、正文 URL 替换 - 支持 Cookie 透传、合并、替换和额外请求/响应头
- 支持按路径、Content-Type、状态码配置透传
- 支持条件规则:按请求体关键词、上游状态码、响应正文或响应头命中后改状态码、改正文、加头
- 支持
gb2312、gbk、gb18030等旧编码页面正文替换,避免强制转成 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
启动
正式使用时默认监听 80 和 443。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 部署
发布包里已经带了 Dockerfile 和 docker-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
如果宿主机的 80 或 443 已经被占用,可以把 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 和响应改写,它会比较省事。