Nginx 中的 HTTP 错误 json
HTTP errors as json in nginx
我有 Python Flask 应用程序,当出现错误请求时,它使用 @app.errorhandler
到 return json 对象而不是典型的 HTML 消息,不允许使用方法、找不到页面或任何其他 HTTP 异常。
我现在正在尝试让 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'; }
您必须将 uwsgi_intercept_errors 与 uwsgi_pass
一起使用
和proxy_intercept_errors
与proxy_pass
我有 Python Flask 应用程序,当出现错误请求时,它使用 @app.errorhandler
到 return json 对象而不是典型的 HTML 消息,不允许使用方法、找不到页面或任何其他 HTTP 异常。
我现在正在尝试让 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'; }
您必须将 uwsgi_intercept_errors 与 uwsgi_pass
和proxy_intercept_errors
与proxy_pass