nginx为烧瓶中的非处理异常500错误提供502

时间:2018-02-12 23:11:44

标签: python nginx flask uwsgi

我正在运行Flask应用程序并使用uwsgi socket nginx配置。

这可能是一个愚蠢的问题,但我面临的问题是每当Flask代码中出现异常(例如1/0的非处理异常)时,我的nginx给出502而不是500.我想知道是否提高默认情况下,异常不会从uwsgi unix socket传播到nginx为500,或者我是否需要明确指定?在某处我读到了异常,Flask并没有自动提出500错误信息。任何评论都会有所帮助。感谢。

2 个答案:

答案 0 :(得分:1)

看看502规范:

  

超文本传输​​协议502错误网关服务器错误响应   代码表示服务器在充当网关或代理时,   从上游服务器收到无效响应。

如果您的应用在响应异常时响应任何内容,则很可能是垃圾和nginx(正确地)引发502,这意味着“我不会(而不是不能)与后端通话”。

如果你想要500s,你必须捕获任何可能的底层异常,将它包装在一个有效的响应中,它将由nginx处理。

答案 1 :(得分:0)

最后我能够解决这个问题。感谢@Jeff Storey和@joppich。

我的代理服务器无法读取导致此问题的后端服务器的响应。我添加了一个拦截器来捕获所有异常,并使用nginx proxy_intercept_errors on;通过uwsgi将其传播到NGINX。非常感谢Jeff和joppich。感谢您的帮助。