假设需求是这样的:Nginx监听的端口是80,假设后端服务器域名是:http ://hello.com,Nginx作为代理接受客户端的请求,Nginx转发请求http://hello.com。如果 Nginx 和后端服务器建立连接超时,则必须将 json 格式的数据返回给客户端。假设数据如下:
{ "code": -1 "message":"failed to connect remote error" }
而我想让客户端收到一个500的状态码,想请教前辈实现这个功能,Nginx怎么配置?
假设需求是这样的: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" }';
}
}
基本上我们给它一个上游服务器的代理,然后如果上游服务器响应与服务器相关的错误,我们将返回我们的 JSON 内容和 500 状态。