You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2上Docker部署FastAPI无法访问问题排查求助

AWS EC2 Docker运行FastAPI无法外部访问的排查与解决

初始问题排查(显示Nginx欢迎页时)

当EC2控制台显示Uvicorn在http://0.0.0.0:80运行,但访问公网IP或EC2本地localhost显示Nginx默认页,需排查以下内容:

  • Docker端口映射:确认启动容器时是否添加端口映射参数,比如docker run -p 80:80 你的镜像名。若未映射,EC2主机的80端口会被Nginx占用,导致访问走Nginx而非容器内的FastAPI服务。
  • 端口占用检查:执行ss -tulpn | grep :80,查看80端口被哪个进程占用。如果结果显示nginx,说明容器未正确映射80端口,或映射到了其他端口。
  • 容器运行状态:执行docker ps,确认容器处于运行状态,且PORTS列显示正确的端口映射(如0.0.0.0:80->80/tcp)。

Nginx反向代理简便配置

若需保留Nginx做反向代理,可使用以下简化配置:

  1. 创建Nginx配置文件(如/etc/nginx/sites-available/fastapi.conf):
server {
    listen 80;
    server_name 你的EC2公网IP;

    location / {
        proxy_pass http://localhost:主机映射端口;  # 例如容器映射到主机8000,则填写http://localhost: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;
    }
}
  1. 创建软链接到启用目录:ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enabled/
  2. 重启Nginx生效:nginx -s reload

注意:此时容器需映射到主机非80端口(如8000),避免与Nginx的80端口冲突。

停用Nginx后本地无法访问的排查

停用Nginx后EC2内部可访问,但本地笔记本无法访问,且已检查安全组、sudo ufw status返回inactive(即防火墙未启用),需排查:

  • Docker端口映射有效性:再次确认启动容器时的端口映射参数,比如docker run -p 80:80 你的镜像名,必须确保容器内的端口映射到EC2主机的0.0.0.0(而非仅localhost)。
  • 主机端口监听状态:执行ss -tulpn | grep 你的映射端口,确认主机在监听该端口(比如映射80的话,应看到docker-proxy监听0.0.0.0:80)。
  • AWS网络ACL配置:检查EC2所在子网的网络ACL,确保允许入站的目标端口(如80)流量,同时允许出站的响应流量(一般允许所有出站即可)。
  • 公网IP正确性:确认访问的是EC2的公网IP/弹性IP,而非私有IP,且EC2已成功分配公网IP。
  • 端口连通性测试:在本地执行telnet 你的EC2公网IP 映射端口或nc -zv 你的EC2公网IP 映射端口,判断是否能建立连接,定位是网络阻塞还是服务问题。

内容的提问来源于stack exchange,提问作者breakshooter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:35:26