Files
xk-hy-forward-go/README.md
2026-05-22 08:42:27 +08:00

85 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# xk-hy-forward-go
内网双通道转发:外网 `xk-hy-transit-go` 只访问本服务,由本机转发至浙江省政务云(`59.202.52.129`)。
## 架构
| 监听路径 | 转发目标 | 用途 |
|----------|----------|------|
| `POST /province/supervise/data` | `SUPERVISE_TARGET_URL`(28212) | 加密后的监管业务 JSON |
| `POST /mng/file/auth/upload` | `FILE_TARGET_URL`(28211) | 处方 PDF multipart 上传 |
| `GET /health` | 本地 | 健康检查 |
转发规则:
- **URL**:由环境变量固定(Scheme/Host/Path),不使用客户端 URL。
- **Body**:原样透传。
- **Header**:仅白名单内的业务头透传到政务云;`User-Agent`、`Cookie`、`X-Forwarded-*`、`X-Forward-Token` 等不会带上游。
- 监管白名单含 `requestBody`、`X-Ca-Signature` 等(与 transit `hy.BuildUpload` 一致)。
## 环境配置
```bash
cp .env.example .env
# 编辑 .env 后,建议在项目根目录启动(见下方「启动与 .env 加载」)
```
### 启动与 .env 加载
程序启动时会按以下顺序查找并加载 **第一个存在的** `.env` 文件:
1. 当前工作目录(`os.Getwd()`)
2. 可执行文件所在目录
3. 可执行文件上级目录
加载成功时控制台会输出:`[forward] 已加载 /path/to/.env`。若未找到任何 `.env`,会提示使用环境变量或代码默认值。
**注意:**
- 请使用 **`#` 作为注释**(不要用 `;`,godotenv 不会把 `;` 行当作注释)。
- 从 IDE / 服务方式启动时,请把 **Working Directory** 设为 `xk-hy-forward-go` 项目根,或把 `.env` 放在 **exe 同目录**。
- 核对启动日志中的 `supervise=`、`file=` 是否为你在 `.env` 里配置的 URL。
| 变量 | 默认 | 说明 |
|------|------|------|
| `LISTEN_ADDR` | `:16001` | 监听地址(建议绑内网 IP) |
| `SUPERVISE_TARGET_URL` | 政务云 28212 | 监管业务上报 |
| `FILE_TARGET_URL` | 政务云 28211 | 处方 PDF 上传 |
| `TARGET_URL` | (兼容) | 未设 `SUPERVISE_TARGET_URL` 时生效 |
| `ALLOW_IPS` | 空 | 逗号分隔来源 IP;**生产建议填 transit 出口 IP** |
| `FORWARD_SHARED_SECRET` | 空 | 非空时要求请求头 `X-Forward-Token` 一致(与 transit `.env` 同值) |
| `LOG_DIR` | 空 | 日志根目录;默认 `{程序目录}/../log/forward/` |
## 运行
```bash
cd xk-hy-forward-go
go run main.go
go test ./...
```
`main.go` 仅作入口,业务逻辑在 `internal/forward` 包;`go run main.go` 会编译入口及其依赖,启动全部路由(`/health`、监管、文件上传)。等价方式:`go run .`、`go build -o forward.exe .`。
Windows 也可双击或执行项目根目录下的 [`run.bat`](d:/worker/code/xk-hy-forward-go/run.bat)(内部为 `go run main.go`)。
IDE 调试:Working Directory 设为项目根,运行文件选 `main.go` 即可。
本地联调 mock 上游时,在 `.env` 中设置:
```env
SUPERVISE_TARGET_URL=http://127.0.0.1:18001/api/
FILE_TARGET_URL=http://127.0.0.1:18001/api/u
```
未配置 `SUPERVISE_TARGET_URL` / `FILE_TARGET_URL` 时,代码默认指向政务云 `59.202.52.129`(与 `.env.example` 一致)。
## 应用日志
每条转发写入 `app-YYYY-MM-DD.log`(同时输出控制台),格式:
```text
2026-05-19T22:00:01+08:00 | 192.168.1.20 | supervise | http=200 | 120ms | https://59.202.52.129:28212/...
```
不记录完整 body 与 uploadToken。