Plesk服务器Docker部署FastAPI无法代理请求求助
解决Plesk+Docker部署FastAPI的HTTPS/端口访问问题
核心问题拆解
https://example.com:8000报SSL错误:FastAPI容器默认仅处理HTTP请求,未配置SSL证书,直接用HTTPS访问容器端口会触发SSL握手失败。- 不带端口访问网关超时:Nginx代理规则配置有误,要么代理目标指向错误,要么协议不匹配(比如Nginx向FastAPI的HTTP端口发送HTTPS请求),导致上游连接超时;Docker收到的无效请求正是这种不匹配的HTTPS请求。
修复步骤
1. 修正Nginx代理配置(解决无端口访问超时)
登录Plesk面板,找到对应域名的Nginx设置,调整代理规则:
- 代理目标必须指向Docker映射的本地HTTP端口,比如
http://127.0.0.1:8000,禁止使用HTTPS协议。 - 添加必要的代理头,保证FastAPI能正确识别请求来源:
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
- 保存配置后,在Plesk「工具与设置>服务管理」中重启Nginx服务。
2. 限制容器端口仅本地访问(推荐)
既然用Nginx做反向代理,无需让容器端口直接暴露外网:
- 在Docker扩展中修改FastAPI容器的端口映射,将
0.0.0.0:8000:8000改为127.0.0.1:8000:8000,仅允许本地Nginx访问容器端口。
3. 规范HTTPS访问方式
- 不要直接用
https://example.com:8000访问,正常通过https://example.com访问即可——Nginx会完成SSL终结,再将HTTP请求转发给FastAPI容器。 - 若必须通过带端口的HTTPS访问(不推荐),需给FastAPI容器配置SSL:
- 将Plesk生成的SSL证书(路径通常在
/usr/local/psa/var/certificates/)挂载到容器内部。 - 修改FastAPI启动命令,用Uvicorn指定SSL参数:
- 将Plesk生成的SSL证书(路径通常在
uvicorn main:app --host 0.0.0.0 --port 8000 --ssl-keyfile /container/path/privkey.pem --ssl-certfile /container/path/fullchain.pem
4. 验证配置有效性
- 重启FastAPI容器和Nginx后,访问
https://example.com测试是否正常响应。 - 查看Nginx日志(
/var/log/nginx/下对应域名的日志文件),确认无上游连接超时错误。 - 查看Docker日志,确认收到的是正常HTTP请求,不再出现无效请求记录。
内容的提问来源于stack exchange,提问作者pmo42
相关产品推荐
相关产品推荐

