【问题标题】:Configuring Nginx with Unicorn Flask within Docker在 Docker 中使用 Unicorn Flask 配置 Nginx
【发布时间】:2021-02-04 23:08:45
【问题描述】:

我在为 container (server) 容器配置 nginx.conf 时遇到问题。

  • 不用 nginx:我可以通过 gunicorn 正常访问应用。
  • 使用 nginx:我得到 502 Bad Gateway

我的第一个问题是,如果我有入口 nginx,我是否应该在容器(服务器)上安装 nginx?

我的第二个问题是,为什么这个配置不起作用。这是我的容器(服务器)的 docker 文件

Dockerfile

FROM python:3 as builder
WORKDIR '/app'
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
ENTRYPOINT [ "gunicorn", "-b", "0.0.0.0:8000", "run:app" ]

FROM nginx
EXPOSE 80
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf

nginx.conf

upstream flask_server {
    server localhost:8000;
}

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://flask_server;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Command

# build
docker build -t test/server .
# run
docker run -p 80:80 test/server

我想我的问题是上游本地主机不工作。当我在本地开发时,我没有办法专门通过 docker 测试这个容器吗?还是我必须在本地使用 docker-compose 进行测试并将 nginx 放在单独的容器中?

【问题讨论】:

    标签: docker nginx flask gunicorn


    【解决方案1】:

    我知道,那个帖子可能已经过时了,但它仍在由 Google 搜索 :)

    我的第二个问题是,为什么此配置是否不起作用。这是我的容器(服务器)的 docker 文件

    所以,正如我所见,您指定的 proxy_passhttp://flask_server。 这意味着,flask_server 主机名应该是可解析的名称。

    • 此名称可能只是您的 Docker 容器的名称,但您的 Dockerfile 或 docker run 不包含此类选项。
    • 此名称可以是一组服务器,但在这种情况下,您必须定义此指令
    upstream flask_server {
        server <hostname1>;
        server <hostname2>;
    }
    

    (c)https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

    如果一个域名解析为多个地址,所有这些地址都将以循环方式使用。另外,地址可以指定为server group

    总结:修复 502 错误(这意味着与上游的连接超时)您可以使用 2 种方法:

    • proxy_pass http://flask_server; 更改为proxy_pass http://0.0.0.0:8000;
    • 根据manual定义upstream指令

    我的第一个问题是,如果我有入口 nginx,我什至应该在容器(服务器)上安装 nginx 吗?

    在我看来 - 我不应该。 您可以在容器(服务器)上部署 Nginx,以防万一您希望(将来)在多个 gunicorn 实例之间实现负载平衡流量,或者希望提供一些 HTTP 身份验证或访问限制。

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 2012-08-17
      • 2017-11-27
      • 2013-08-09
      • 1970-01-01
      • 2016-07-15
      • 2020-08-02
      • 2019-09-27
      • 2016-10-13
      相关资源
      最近更新 更多