NGINX / Gunicorn: Return JSON отформатированные сообщения об ошибках - PullRequest
1 голос
/ 28 февраля 2020

Я использую NGINX в качестве обратного прокси-сервера для сервера приложений gunicorn. При возникновении ошибки сервера (URL-адрес не найден, время ожидания запроса и т. Д. c) ответ возвращается как html. Я знаком с директивой *1001* страницы ошибок , и я попытался поместить директиву ошибки в блок сервера, который перенаправляет на сервер приложений, как показано ниже, однако ответ по-прежнему возвращается как html. Есть идеи?

server {
        server_name rtj.foo.com;
        client_max_body_size 10M;

        location = /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
            root /home/ubuntu/api;
        }

        error_page 404 /404.html;
        location /404.html{
            return 404 '{"error": {"status_code": 404,"status": "Not Found"}}';
        }

        location / {
            include proxy_params;
            proxy_pass http://unix:/run/gunicorn.sock;
        }

}

1 Ответ

0 голосов
/ 28 февраля 2020

Вам необходимо переопределить тип содержимого для запрошенного документа, добавив и очистив блок types и установив default_type в application/json.

Подробнее см. в этом документе .

Например:

error_page 404 /404.html;
location = /404.html {
    types {}
    default_type application/json;
    return 404 '{"error": {"status_code": 404,"status": "Not Found"}}';
}

Если URI не нуждается в прямом доступе (то есть является частным для директивы error_page), вы можете использовать вместо этого именованное местоположение:

error_page 404 @error404;
location @error404 {
    types {}
    default_type application/json;
    return 404 '{"error": {"status_code": 404,"status": "Not Found"}}';
}
...