【问题标题】:uwsgi on Docker and Nginx as reverse proxyDocker 和 Nginx 上的 uwsgi 作为反向代理
【发布时间】:2018-09-28 18:58:11
【问题描述】:

我有一个安装了 Nginx 的亚马逊 EC2 实例(使用 Amazon Linux)。我设置了一个 python Flask 应用程序并将其放在 Docker 容器上。 Docker 文件在这里:

FROM apierleoni/flask-uwsgi:latest
EXPOSE 3001
WORKDIR /usr/src/app
RUN pip install --upgrade pip
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 3001

CMD [ "uwsgi", "--socket", "0.0.0.0:3001", \
               "--protocol", "http", \
               "--wsgi", "wsgi:app" ]

docker-compose.yml 看起来像这样:

version: '3'
services:
  integration-app:
    container_name: integration-app-api
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - '.:/usr/src/app'
    ports:
      - '3001:3001'

运行docker-compose up 命令后,我可以在端口 3001 上通过 HTTP 访问 Flask 应用程序路由

Nginx 反向代理不起作用。它会产生 502 错误。 Nginx 的配置是这样的

upstream api_server2 {
 server 127.0.0.1:3001;
}



server {
    ...

    location /crm-project-api {
      include uwsgi_params;
      uwsgi_pass api_server2;
    }

    ...
}

【问题讨论】:

  • 当您收到 502 错误时,您能检查一下 /var/log/nginx/error.log 中显示的内容吗?
  • 127.0.0.1 始终是“这个容器”并且是上游的错误值。
  • @VigneshSP 这就是它所说的:21315#0: *3284 上游过早关闭连接,同时从上游读取响应标头,客户端:204.107.115.18,服务器:www.gndhtrn.tk,请求:“ GET /crm-project-api HTTP/2.0”,上游:“uwsgi://127.0.0.1:3001”,主机:“www.gndhtrn.tk”
  • @DavidMaze nginx 没有安装在 docker 上,它安装在本地的 AWS EC2 实例上。

标签: python docker nginx flask uwsgi


【解决方案1】:
upstream api_server2 {
 server 127.0.0.1:3001;
}
instead of this add:-
upstream api_server2{
 server integration-app:3001;  // container name
}

CMD [ "uwsgi", "--socket", "0.0.0.0:3001", \
               "--protocol", "http", \
               "--wsgi", "wsgi:app" ]

添加uwsgi代替http协议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 2017-03-21
    • 2015-02-09
    • 2016-07-22
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多