После того, как Nginx и внутренний сервер установят тайм-аут соединения, я хочу, чтобы Nginx возвращал данные json клиенту. Как это настроить?

Предположим, что требования таковы: порт, который прослушивает Nginx, - 80, а доменное имя внутреннего сервера предполагается: http://hello.com, Nginx принимает запрос от клиента в качестве прокси, а Nginx перенаправляет запрос на http://hello.com. Если Nginx и внутренний сервер устанавливают тайм-аут соединения, данные в формате json должны быть возвращены клиенту. Предполагается, что данные будут такими:

{"code": -1 "message": "не удалось подключиться удаленно, ошибка"}

И я хочу, чтобы клиент получил код состояния 500. Я хотел бы попросить пожилых людей добиться этой функции, как настроить Nginx?


person hantao huang    schedule 17.08.2018    source источник


Ответы (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.

person Neekoy    schedule 17.08.2018