nginx 中的 HTTP 错误为 json

发布于 2025-01-12 10:31:04 字数 903 浏览 0 评论 0原文

我有一个 Python Flask 应用程序,当发生错误请求、方法不允许、页面未找到或任何其他 HTTP 异常时,它使用 @app.errorhandler 返回 json 对象,而不是典型的 HTML 消息。

我现在试图让 nginx 处理这些事情,但只取得了部分成功。当我使用无效方法(例如 PATCH)发出请求时,我收到 json 消息。但是当我使用不存在的页面时,我会收到典型的 HTML 消息。

这就是我的 nginx 服务器配置的样子。这是 Flask docs 中给出的示例,有两行额外的内容最后:

server {
    location / {
        limit_except GET POST {
            deny all;
        }

        try_files $uri @yourapplication;
    }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }

    proxy_intercept_errors on;
    include api_json_errors.conf;
}

其中 api_json_errors.conf 是这样的:

error_page 400 = @400;
location @400 { return 400 '{"status":400,"message":"Bad request"}\n'; }

I have Python Flask application that uses @app.errorhandler to return json a object instead of the typical HTML messages when occurrs a bad request, method not allowed, page not found or any other HTTP exception.

I am now trying to make nginx handle such things with only partial success. When I make a request using an invalid method (e.g. PATCH) I get the json message. But when I use an unexisting page, I get the typical HTML message.

This is how my nginx server configuration looks like. It is the example given in the Flask docs with two extra lines at the end:

server {
    location / {
        limit_except GET POST {
            deny all;
        }

        try_files $uri @yourapplication;
    }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }

    proxy_intercept_errors on;
    include api_json_errors.conf;
}

where api_json_errors.conf is something like this:

error_page 400 = @400;
location @400 { return 400 '{"status":400,"message":"Bad request"}\n'; }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

定格我的天空 2025-01-19 10:31:04

您必须将 uwsgi_intercept_errorsuwsgi_pass 一起使用

以及 proxy_intercept_errorsproxy_pass

You have to use uwsgi_intercept_errors with uwsgi_pass

And proxy_intercept_errors with proxy_pass

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文