我在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;
}
}
答案 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;
}
}