【问题标题】:GCP deployment with nginx - uwsgi - flask fails使用 nginx 的 GCP 部署 - uwsgi - flask 失败
【发布时间】:2023-02-09 16:14:13
【问题描述】:

我有一个非常简单的烧瓶应用程序,它部署在 GKE 上并通过谷歌外部负载均衡器公开。并从后端服务获取随机 502 响应(在后端服务和 nginx 上添加自定义标头以确保源,我可以看到后端服务的标头但看不到 nginx 的标头)

设置是;

LB -> backend-service -> neg -> pod (nginx -> uwsgi) 其中 pod 是使用 flask 构建并通过 uwsgi 和 nginx 部署的应用程序。

该场景是以简单安全的方式处理图像上传。发件人向我发送一个带有上传请求的令牌。

我的烧瓶应用程序

  1. 使用“请求”通过另一项服务接收请求并检查发送的令牌。
  2. 如果令牌有效,继续处理图像并返回 200
  3. 如果令牌无效,停止并发回 401 响应。

    首先,我对 200 和 401 产生了怀疑。并将所有响应恢复为 200。在一些预期的响应之后,服务器开始响应 502 并继续发送。 “一开始的一些消息成功了”。

    nginx 错误日志包含以下行

    2023/02/08 18:22:29 [error] 10#10: *145 readv() failed (104: Connection reset by peer) while reading upstream, client: 35.191.17.139, server: _, request: "POST /api/v1/imageUpload/image HTTP/1.1", upstream: "uwsgi://127.0.0.1:21270", host: "example-host.com"
    

    我的 uwsgi.ini 文件如下;

    [uwsgi]
        socket = 127.0.0.1:21270
        master
        processes = 8
        threads = 1
        buffer-size = 32768
        stats = 127.0.0.1:21290
        log-maxsize = 104857600
        logdate
        log-reopen
        log-x-forwarded-for
        uid = image_processor
        gid = image_processor
        need-app
        chdir = /server/
        wsgi-file = image_processor_application.py
        callable = app
        py-auto-reload = 1
        pidfile = /tmp/uwsgi-imgproc-py.pid
    

    我的 nginx.conf 如下

    location ~ ^/api/ {
            client_max_body_size 15M;
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:21270;
        }
    

    最后,我的应用程序有一个带有简单 JSON 响应的健康检查方法。它不做任何额外的事情,只是返回。如上所述,这永远不会失败。

    编辑:我在 pod 中的 nginx 访问日志显示响应为 401,而客户端收到 502。

【问题讨论】:

    标签: nginx flask google-cloud-platform google-kubernetes-engine uwsgi


    【解决方案1】:

    对于那些将面临同样问题的人来说,问题是后数据读取(或不读取)。

    nginx 期望获得代理读取的发布数据,在我们的例子中是 uwsgi,应用程序。但根据我的逻辑,在某些情况下我没有阅读它并返回响应。

    设置 uwsgi 后缓冲解决了这个问题。

    post-buffering = %(16 * 1024 * 1024)
    

    这让我想到了这个解决方案;

    https://stackoverflow.com/a/26765936/631965 Nginx uwsgi (104: Connection reset by peer) while reading response header from upstream

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2014-06-04
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2022-09-01
      相关资源
      最近更新 更多