首页 > 解决方案 > 如何使用 GCP 和 NGINX 修复 502 Bad Gateway 错误

问题描述

我正在尝试遵循有关在 GCP vm 实例上创建 Apache Airflow 管道的教程(https://towardsdatascience.com/10-minutes-to-building-a-machine-learning-pipeline-with-apache-airflow- 53cd09268977)但是在构建并运行 docker 容器之后,当尝试使用以下命令访问网络服务器时,我在 Nginx 1.14 中收到此“502 Bad Gateway”错误:

http://<VM external ip>/

我对使用 GCP 很陌生,不知道如何解决这个问题。

一些在线研究建议将 NGINX 配置文件编辑为:

keepalive_timeout 650;
keepalive_requests 10000;

但这并没有改变任何东西。

GCP 实例是 N1-standard-8,带有 Ubuntu 18.04,并启用了云、HTTPS 和 HTTP 访问。

启用的 Nginx 站点是:

server {
    listen 80;

    location / {
            proxy_pass http://0.0.0.0:8080/;
    }
}

标签: nginxgoogle-cloud-platformgoogle-compute-engineairflow

解决方案


根本原因
您遇到的问题与keepalives无关,它更简单 - docker容器退出并且没有运行,因此当nginx尝试将您的请求代理到容器中时,它会失败并因此出现错误。所述失败是由于气流与当前版本的 sqlalchemy 不兼容。

验证
运行此命令查看失败容器的日志

sudo docker logs `sudo docker ps -a -f "ancestor=greenr-airflow" --format '{{.ID}}'`

你会看到容器内的python导入包失败,报如下错误:

No module named 'sqlalchemy.ext.declarative.clsregistry'

解决方案

虽然我严格按照教程进行操作,但我建议不要使用 sudo 运行命令,您可能希望稍微偏离教程,以免这样做。

跑步前

sudo docker build -t greenr-airflow:latest .

命令,编辑 Dockerfile 文件并添加以下两行

&& pip install SQLAlchemy==1.3.23 \
&& pip install Flask-SQLAlchemy==2.4.4 \

在正在安装的软件包列表中的某个位置,我在之后添加了它

&& pip install -U pip setuptools wheel \

这是撰写本文时的第 54 行。

如果您想重复使用相同的实例,请在更改文件后删除并重建图像:

sudo docker rmi greenr-airflow
sudo docker build -t greenr-airflow:latest .

推荐阅读