我在运行于 Amazon ELB 后面的 gunicorn 服务器(为 flask 应用程序提供服务)上遇到了一个奇怪的问题。在访问 gunicorn 服务器上的不同 URL 时,Amazon ELB 会间歇性地抛出 502 错误。似乎没有哪个 URL 会成为这些错误的受害者,所以我无法找出其中的规律。起初我以为 gunicorn 和 ELB 之间出了问题,导致了 502 错误。然而,我打开了 gunicorn 上的访问日志,发现 gunicorn 确实在接收和处理这些请求,好吧,反正就是在接收它们:
100.111.0.0 - - [11/Feb/2019:13:42:37 +0000] "GET /page?args=0 HTTP/1.1" 200 502 "https://oursite.com/page" "<USER AGENT>"
它响应的是 502,而这正是让我感到困惑的部分。我以为 502 是网关返回的(例如作为前端运行的 ELB 或 nginx)。我不确定 502 怎么会成为 gunicorn 的有效返回代码,因为它实际上不是通往任何事物的网关,除了它背后的 flask 应用程序。我检查了底层 flask 应用程序生成的日志,上面的日志的时间戳处没有出现任何内容。我还检查了应用程序开发人员是否真的在任何地方返回了 502,但看起来他们并没有这样做。
如果有人能就此问题提供帮助,我将不胜感激。到目前为止,我发现的大多数帖子都与 gunicorn 前面的网关有关,因为它们无法与 gunicorn 本身通信,所以它们返回了 502。但这里的情况似乎并非如此,所以我有点不知所措。