在nginx中关闭html错误包装

时间:2017-09-13 18:35:34

标签: nginx

我在Ubuntu上使用nginx将请求转发到Spring Boot驱动的API服务器。有时,API会返回客户端应用程序消耗的4xx和5xx错误的正文。例如。我可能会在API代码中返回:

{
  "message": "blah"
}

然而,nginx似乎将错误包装到某些HTML中并将响应嵌入其中。有没有办法禁用这种行为?是否有一种方法可以集中进行(例如,对于所有4xx和5xx错误,没有明确地用error_page完全写出来)

类似的问题和接受的答案here,但这似乎有点黑客。我确信有更好的方法可以做到这一点......

编辑:Config看起来像这样:

server {
    listen 80;

    server_name my.domain.com;

    location / {
            proxy_pass http://127.0.0.1:9001;
    }
}

2 个答案:

答案 0 :(得分:1)

您只需在位置

中添加error_page指令
server {
    listen 80;

    server_name my.domain.com;

    location / {
            error_page 404 = 404;
            proxy_pass http://127.0.0.1:9001;
    }
}

这样做是从http块中设置的先前指令取消error_page。并将结果原样传递回客户端。您不希望在此error_page指令中将JSON应发送回客户端的代码。

答案 1 :(得分:0)

您可以尝试更新您的nginx配置并添加:

error_page 403 /error403.html;
location = /error403.html {
   root   html;
}

或错误组:

error_page   500 502 504 /50x.html;
location = /50x.html {
    root   html;
}

在这里你可以将html文件替换为json,这样nginx将返回json respnse,如:

error_page 404 /404.json;
location = /404.json {
    root   html;
}

并且不要忘记将404.json(以及所有适当的文件)放入config中指定的root。

在您的配置中,它将如下所示:

server {
    listen 80;

    server_name my.domain.com;

    location / {
            proxy_pass http://127.0.0.1:9001;
    }

    error_page 404 /404.json;
    location = /404.json {
        root   html;
    }
    error_page 500 502 504 /50x.json;
    location = /50x.json {
        root   html;
    }
}