0

假设需求是这样的:Nginx监听的端口是80,假设后端服务器域名是:http ://hello.com,Nginx作为代理接受客户端的请求,Nginx转发请求http://hello.com。如果 Nginx 和后端服务器建立连接超时,则必须将 json 格式的数据返回给客户端。假设数据如下:

{ "code": -1 "message":"failed to connect remote error" }

而我想让客户端收到一个500的状态码,想请教前辈实现这个功能,Nginx怎么配置?

4

1 回答 1

1

尝试以下操作:

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

于 2018-08-17T16:00:00.870 回答