我有一个FastAPI应用程序,它托管在带有ELB的EC2实例上,用于使用SSL保护端点。
该应用程序正在使用docker-compose.yml
文件运行。
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的日志:
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 "-" "-" "-" "-" "-" "-" "-"
发布于 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,就应该进行健康检查
发布于 2022-07-25 04:29:44
什么是"502坏网关“?
HyperText传输协议(HTTP) 502坏网关服务器错误响应代码指示服务器在充当网关或代理时从上游服务器接收无效响应。
HTTP协议
从docker-compose.yml
文件中,您将公开端口"8000“,该端口将无法工作。
可能的解决办法
安装NGINX并添加服务器配置
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
文件中的80或443
我的建议是使用nginx。
https://stackoverflow.com/questions/73020835
复制相似问题