【发布时间】:2023-02-09 16:14:13
【问题描述】:
我有一个非常简单的烧瓶应用程序,它部署在 GKE 上并通过谷歌外部负载均衡器公开。并从后端服务获取随机 502 响应(在后端服务和 nginx 上添加自定义标头以确保源,我可以看到后端服务的标头但看不到 nginx 的标头)
设置是;
LB -> backend-service -> neg -> pod (nginx -> uwsgi) 其中 pod 是使用 flask 构建并通过 uwsgi 和 nginx 部署的应用程序。
该场景是以简单安全的方式处理图像上传。发件人向我发送一个带有上传请求的令牌。
我的烧瓶应用程序
- 使用“请求”通过另一项服务接收请求并检查发送的令牌。
- 如果令牌有效,继续处理图像并返回 200
- 如果令牌无效,停止并发回 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