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 状态。