保留5号历史三档实现,新增中下庭高度定位、扶正裁切、矩形叠加与30案例对比页。 worker仅允许本机和配置白名单访问;网关不增加IP限制。空图片URL字段改写限定为52号,保持旧接口兼容。同步接口、裁切与部署文档。 验证:113项测试通过;1项历史数值基线失败,在未修改的a3fddbb版本复现。浏览器验证5/52及30案例对比页通过。
2.3 KiB
GPU worker 接口 IP白名单
仅GPU worker使用项目根目录的ip_access.json,不存在时仅允许本机。网关不启用IP限制。配置每次请求重新读取,修改后立即生效。现有X-Internal-Token鉴权继续有效。
{
"allowed_ips": ["49.232.51.171"]
}
当前已将网关IP 49.232.51.171加入白名单;本机回环地址和网卡自身地址自动允许,其余来源返回HTTP403、code=1010。支持IPv4、IPv6及CIDR,不自动允许整个内网。
worker的所有动态路径统一保护,包括5号、52号、其他业务接口、调试接口、代理接口、健康检查和文档接口。/static/下的测试页和图片可正常访问,但页面发出的API请求仍需通过IP限制。
启动GPU worker时使用uvicorn ... --no-proxy-headers,保留真实连接来源。run_worker.sh与hair-worker.service已配置该选项。来源被服务器提前改写、地址格式错误或白名单配置无效时拒绝访问。
判断依据是直接连接worker的IP,忽略X-Forwarded-For、X-Real-IP和Forwarded,这些请求头不能用于绕过限制。由网关转发的请求按网关IP判断,网关后面的最终用户无需加入worker白名单。网关保持原有鉴权和转发流程,无需部署此配置。
ip_access.json不入Git;配置格式参考ip_access.example.json。本机网卡地址在请求时自动获取。
部署与维护
首次部署复制ip_access.example.json为ip_access.json,示例已包含网关49.232.51.171;已有配置不覆盖。该操作仅在GPU worker执行,网关服务和启动参数保持原样。
修改allowed_ips后保存为有效JSON即可生效,无需重启;建议写入同目录临时文件再原子替换,避免编辑过程中出现半份JSON。文件不存在时仅允许本机,内容损坏时动态接口一律拒绝。更新程序时保留本机配置文件。
IP检查先于Token检查。白名单内请求仍需原来的X-Internal-Token;/health和/api/v1/debug/*等原本免Token的路径仍需通过IP检查。静态页可打开不代表该来源可以调用API。
验证命令:./venv/bin/pytest tests/test_ip_access.py -q,覆盖本机、精确白名单、CIDR、IPv6、转发头伪造、热更新、全接口拦截与网关不受限制。