nginx отправил пустые 200 ответов

19

Я настраиваю отказоустойчивый сервер, которому поручено принимать любые входящие запросы и отвечать пустым 200 ответом. Идея состоит в том, чтобы минимизировать время ответа и гарантировать, что мы не отправляем 40x или 50x.

Я попытался использовать return 200;нужные места в Nginx, но моим системам мониторинга (Pingdom) не понравился ответ, и я считаю, что сервер не отвечает.

Есть ли лучший способ сделать это, конечно, с минимальными издержками на сервере?

Спарш Гупта
источник

Ответы:

23

Код состояния HTTP 204 No Contentпредназначен для сообщения «Я выполнил запрос, но тело для возврата отсутствует»:

10.2.5 204 Нет контента

Сервер выполнил запрос, но ему не нужно возвращать тело объекта, и он может захотеть вернуть обновленную метаинформацию. Ответ МОЖЕТ включать новую или обновленную метаинформацию в форме заголовков объекта, которые, если они присутствуют, ДОЛЖНЫ быть связаны с запрошенным вариантом.

Если клиент является агентом пользователя, он НЕ ДОЛЖЕН изменять представление своего документа по сравнению с тем, что вызвало отправку запроса. Этот ответ в первую очередь предназначен для того, чтобы ввод данных для действий происходил, не вызывая изменений в активном представлении документа агента пользователя, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документу, который в данный момент находится в активном представлении агента пользователя.

Ответ 204 НЕ ДОЛЖЕН включать тело сообщения и, таким образом, всегда заканчивается первой пустой строкой после полей заголовка.

Александр Азаров
источник
Привет Алекс Спасибо за примечание. Просто интересно, распознается ли 204 код ответа всеми основными браузерами в наши дни. т.е. если мой сервер начнет отправлять 204, есть ли вероятность того, что некоторые посетители (через браузеры, мобильные телефоны, терминалы) получат ошибку?
Спарш Гупта
1
@SparshGupta Я не эксперт по совместимости браузера, извините. Я быстро проверил пару браузеров (FF 7 и Safari под Mac OSX) - они ничего не делают. Например, если у вас уже открыта страница, вы помещаете URL-адрес, возвращающий 204, в адресную строку и нажимаете Enter, оба браузера по-прежнему отображают эту предыдущую страницу.
Александр Азаров
30

Вы можете сделать так, чтобы nginx возвращал пустой HTTP 200 с помощью блока конфигурации, например:

location = /health {
  return 200;
  #access_log off;
}

Вы можете раскомментировать access_logстроку, если не хотите, чтобы все эти проверки работоспособности регистрировались.

Коди Коулан
источник
6
Следует отметить, что знак «=» после местоположения важен. Без него этот файл должен существовать, иначе nginx не вернет 200. С его помощью вы можете просто создать любое место, которое вам нужно, и не беспокоиться о файлах, и nginx с радостью вернет 200.
Florin Andrei
Как объединить это с базовой аутентификацией, такой, что аутентифицированный запрос возвращает 200, и неаутентифицированным 401?
Кирилл