如何在 Docker 中安全部署 Xinference 并配置 API 鉴权
在高性能计算服务器上通过 Docker 部署 Xinference 时,由于其默认配置较为开放,直接将端口映射到公网会带来极大的安全风险。
本文将记录如何通过配置文件开启鉴权,并解决 /status 接口泄露系统信息的“隐患”。
基础部署环境
首先,我们通常使用如下命令启动一个基础的 Xinference 容器,支持多 GPU 调用:
1 | docker run --name xinference -d -p 9997:9997 \ |
开启核心鉴权:配置
仅设置 XINFERENCE_AUTH_TOKEN 环境变量往往是不够的,Xinference 需要显式的配置文件来激活用户管理系统。
第一步:创建配置文件
在宿主机的挂载目录(如 /data)下创建 auth.json:
1 | { |
注意:api_keys 仅支持16位,以
sk-开头,例如sk-abc1234567890
第二步:更新启动命令
在启动参数中加入 --auth-config 指向该文件:
1 | docker run --name xinference -d -p 9997:9997 \ |
验证鉴权效果
开启配置后,可以通过 curl 测试接口的拦截情况:
- 无 Key 访问:
curl -I http://<IP>:9997/v1/models-> 预期返回401 Unauthorized。 - 带 Key 访问:
curl -H "Authorization: Bearer sk-yourcustomkey123" http://<IP>:9997/v1/models-> 预期返回正常 JSON 数据。
深度加固:解决 /status 接口泄露问题
现象:即使开启了 --auth-config,访问 http://<IP>:9997/status 依然能看到显卡型号、显存占用等敏感信息。
原因: Xinference 将 /status 视为健康检查接口,默认不纳入 API Key 的保护范围。
解决方案:Nginx 反向代理(推荐)
通过 Nginx 拦截特定路径,只允许通过鉴权的请求转发到后端。
1 | location /status { |
总结:安全检查清单
| 项目 | 状态 | 作用 |
|---|---|---|
--auth-config |
必须 | 开启 API Key 校验及 Web 登录限制 |
api_keys |
必须 | 保护推理资源不被盗刷 |
Nginx / Firewall |
建议 | 屏蔽 /status 接口及限制访问来源 IP |
在公网暴露高性能算力资源时,请务必保持警惕。建议定期更换
secret_key并监控容器日志。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 下雨の波比!


