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

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

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

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

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.

Другие вопросы по тегам