Nginx和后端服务器建立连接超时后,我想让Nginxreturnjson数据给客户端。如何配置?
After Nginx and the backend server establish a connection timeout, I want Nginx to return json data to the client. How to configure it?
假设需求是这样的:
Nginx监听的端口为80,后端服务器域名假设为:http://hello.com,
Nginx作为代理接受客户端的请求,Nginx将请求转发给http://hello.com。如果Nginx与后端服务器建立连接超时,则必须返回json格式的数据给客户端。假设数据是这样的:
{
"code":-1
"message":"failed to connect remote error"
}
并且我希望客户端收到状态码 500。
请问学长们要实现这个功能,Nginx怎么配置?
尝试以下操作:
server {
listen 80;
server_name auth.example.com;
set $upstream 111.222.333.444:8080;
location / {
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_intercept_errors on;
proxy_buffering off;
client_max_body_size 10M;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass http://$upstream;
error_page 500 502 503 504 = @outage;
}
location @outage {
return 500 '{ "code": -1 "message":"failed to connect remote error" }';
}
}
基本上我们给它一个上游服务器的代理,然后如果上游服务器响应与服务器相关的错误,我们将 return 我们的 JSON 内容和 500 状态。
假设需求是这样的: Nginx监听的端口为80,后端服务器域名假设为:http://hello.com, Nginx作为代理接受客户端的请求,Nginx将请求转发给http://hello.com。如果Nginx与后端服务器建立连接超时,则必须返回json格式的数据给客户端。假设数据是这样的:
{ "code":-1 "message":"failed to connect remote error" }
并且我希望客户端收到状态码 500。 请问学长们要实现这个功能,Nginx怎么配置?
尝试以下操作:
server {
listen 80;
server_name auth.example.com;
set $upstream 111.222.333.444:8080;
location / {
proxy_pass_header Authorization;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_intercept_errors on;
proxy_buffering off;
client_max_body_size 10M;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_pass http://$upstream;
error_page 500 502 503 504 = @outage;
}
location @outage {
return 500 '{ "code": -1 "message":"failed to connect remote error" }';
}
}
基本上我们给它一个上游服务器的代理,然后如果上游服务器响应与服务器相关的错误,我们将 return 我们的 JSON 内容和 500 状态。