85 lines
3.3 KiB
Markdown
85 lines
3.3 KiB
Markdown
# 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。
|