NGINX:将请求详细信息放在自定义 404.json 返回上

jay*_*yde 2 python json nginx custom-error-pages

对于 404s 和 500s/502s/504s 错误,我返回自定义 JSON 错误页面:

{
    "response":
    {
            "status": "EXCEPTION_404_NOT_FOUND",
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的sites-enabled/service_nginx.conf中,我将其设置如下:

error_page 404 /404.json;
location /404.json {
    internal;
    root /temp/error_response_templates;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常。也就是说,每次 404 都会返回 JSON。但我想将请求或一些请求详细信息添加到返回的 JSON 中。例如,对于http://service.com/param1/param2/,如果遇到 404,我想在返回的 JSON 中包含 param1 和 param2。像这样:

{
    "response":
    {
        "status":"EXCEPTION_404_NOT_FOUND",
        "param1":<param1 value>,
        "param2":<param2 value>,
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是,有人可以帮我怎么做吗?提前致谢!

Tom*_*art 5

您可以为每个错误代码设置类似的内容:

  error_page 404 @404_json;

  location @404_json {
    default_type application/json;
    return 404 '{ "response": { "status": "EXCEPTION_404_NOT_FOUND",
    }, "message": "Not Found"}';
  }
Run Code Online (Sandbox Code Playgroud)

或者从文件加载错误消息,例如:

try_files /404.json =404;
Run Code Online (Sandbox Code Playgroud)

建议避免在模板中使用变量(出于性能原因)。