Назад | Перейти на главную страницу

Используйте nginx в качестве кеширующего прокси без условного получения от клиента

Я хотел бы, чтобы Nginx был настроен как обратный прокси-сервер с кешированием перед другим веб-сервером (исходным сервером). Я понимаю, как это сделать.

Но что, если я не хочу зависеть от веб-браузера при отправке условного HTTP-запроса, чтобы воспользоваться преимуществами кеширования? Вместо этого я хочу, чтобы Nginx выполнял условное HTTP-соединение с исходным сервером. Если Nginx имеет устаревший контент, он обновит свой кеш, добавив в него новую копию с исходного сервера.

Поток будет таким:

  1. Браузер (или другой клиент, не являющийся браузером) отправляет HTTP-запрос GET в Nginx. (Без условных заголовков получения).
  2. Nginx отправляет HTTP GET для запрашиваемого содержимого на исходный сервер, ВКЛЮЧАЯ условный заголовок получения (например, «If-Modified-Since»).
  3. Если контент был изменен, исходный сервер отвечает HTTP 200 и контентом, который Nginx использует для обновления своего кеша. В противном случае он отвечает HTTP 304 «не изменено», и Nginx не обновляет свой кеш.
  4. Nginx отвечает браузеру HTTP 200 и запрошенным контентом.

Обоснование состоит в том, чтобы уменьшить нагрузку на исходный сервер для HTTP-запросов от браузера, которые не используют условное получение.

nginx добавил это как новую функцию в разрабатываемой версии 1.5.7.

Добавить proxy_cache_revalidate on; в конфигурацию вашего прокси-кеша, и nginx повторно проверит устаревшее содержимое с помощью If-Modified-Since.