После того, как 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.