nginx 中的 HTTP 错误为 json
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须将 uwsgi_intercept_errors 与
uwsgi_pass
一起使用以及
proxy_intercept_errors
和proxy_pass
You have to use uwsgi_intercept_errors with
uwsgi_pass
And
proxy_intercept_errors
withproxy_pass