首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EC2实例+ ELB托管的fastapi应用程序上的502个坏网关错误

EC2实例+ ELB托管的fastapi应用程序上的502个坏网关错误
EN

Stack Overflow用户
提问于 2022-07-18 10:27:55
回答 2查看 1.3K关注 0票数 1

我有一个FastAPI应用程序,它托管在带有ELB的EC2实例上,用于使用SSL保护端点。

该应用程序正在使用docker-compose.yml文件运行。

代码语言:javascript
运行
复制
version: '3.8'

services:

  fastapi:
    build: .
    ports:
      - 8000:8000
    command: uvicorn app.main:app --host 0.0.0.0 --reload
    volumes:
      - .:/kwept
    environment:
      - CELERY_BROKER_URL=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
    depends_on:
      - redis

  worker:
    build: .
    command: celery worker --app=app.celery_worker.celery --loglevel=info --logfile=app/logs/celery.log
    volumes:
      - .:/kwept
    environment:
      - CELERY_BROKER_URL=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
    depends_on:
      - fastapi
      - redis

  redis:
    image: redis:6-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  redis_data:

直到周五晚上,elb端点运行得非常好,我可以用它。但是从今天早上开始,我突然开始收到一个502坏网关错误。我没有对AWS上的代码或设置进行任何更改。

AWS上的ELB侦听器设置:

连接到EC2实例的目标组。

当我登录到EC2实例&检查正在运行快速app应用程序的docker容器的日志时,我会看到以下内容:

这些日志显示应用程序启动正常。

我没有专门配置任何健康检查。我只有默认的设置

netstat -ntlp输出

我有ELB的日志:

代码语言:javascript
运行
复制
http 2022-07-21T06:47:12.458060Z app/dianee-tools-elb/de7eb044e99165db 162.142.125.221:44698 172.31.31.173:443 -1 -1 -1 502 - 41 277 "GET http://18.197.14.70:80/ HTTP/1.1" "-" - - arn:aws:elasticloadbalancing:eu-central-1:xxxxxxxxxx:targetgroup/dianee-tools/da8a30452001c361 "Root=1-62d8f670-711975100c6d9d4038d73544" "-" "-" 0 2022-07-21T06:47:12.457000Z "forward" "-" "-" "172.31.31.173:443" "-" "-" "-"
http 2022-07-21T06:47:12.655734Z app/dianee-tools-elb/de7eb044e99165db 162.142.125.221:43836 172.31.31.173:443 -1 -1 -1 502 - 158 277 "GET http://18.197.14.70:80/ HTTP/1.1" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" - - arn:aws:elasticloadbalancing:eu-central-1:xxxxxxxxxx:targetgroup/dianee-tools/da8a30452001c361 "Root=1-62d8f670-5ceb74c8530832f859038ef6" "-" "-" 0 2022-07-21T06:47:12.654000Z "forward" "-" "-" "172.31.31.173:443" "-" "-" "-"
http 2022-07-21T06:47:12.949509Z app/dianee-tools-elb/de7eb044e99165db 162.142.125.221:48556 - -1 -1 -1 400 - 0 272 "- http://dianee-tools-elb-yyyyyy.eu-central-1.elb.amazonaws.com:80- -" "-" - - - "-" "-" "-" - 2022-07-21T06:47:12.852000Z "-" "-" "-" "-" "-" "-" "-"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-28 02:49:59

我看到你在使用EC2启动类型。我建议将ssh放入容器中,并尝试在端口8080上设置本地主机,它将返回您的应用程序页面。在此之后,对实例进行同样的检查,因为您已经将容器映射到端口8080。如果这也有效,请尝试将目标组端口修改为8080,这是应用程序工作的端口。如果相同的设置正在处理其他资源,则可能是您正在使用重定向。如果这无助于使用- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logs-collector.html获取完整的日志

如果您的应用程序正在运行端口8000。您需要修改目标组以在那里执行健康检查。一旦目标组端口更改为8000,就应该进行健康检查

票数 1
EN

Stack Overflow用户

发布于 2022-07-25 04:29:44

什么是"502坏网关“?

HyperText传输协议(HTTP) 502坏网关服务器错误响应代码指示服务器在充当网关或代理时从上游服务器接收无效响应。

HTTP协议

  • http -端口号: 80

  • https -端口号: 443

docker-compose.yml文件中,您将公开端口"8000“,该端口将无法工作。

可能的解决办法

  • 使用NGINX

安装NGINX并添加服务器配置

代码语言:javascript
运行
复制
server {
    listen 80;
    listen 443 ssl;
    # ssl on;
    # ssl_certificate /etc/nginx/ssl/server.crt;
    # ssl_certificate_key /etc/nginx/ssl/server.key;
    # server_name <DOMAIN/IP>;
    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

  • 将端口更改为docker-compose.yml文件

中的80443

我的建议是使用nginx。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73020835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档