Я разрабатываю систему кеширования для платформы электронной коммерции, которая будет использовать обратный прокси для кеширования. Я планирую обработать недействительность, используя надлежащие заголовки HTTP / 1.1. То есть я установлю ETag для первого поколения контента и кеша этого значения ETag в приложении. Заголовок Cache-Control будет указывать «must-revalidate», поэтому прокси должен устанавливать заголовок If-None-Match при последующих запросах с ETag. Приложение выполнит поиск кэшированного значения ETag и, если оно совпадет, отправит ответ 304, в противном случае будет сгенерировано полное значение 200.
Я надеялся использовать nginx, но не могу с уверенностью сказать, что он поддерживает ETag (документы указывают, что это не так, но, возможно, они устарели?). Лак это еще один вариант, но я не уверен, что здесь ..
Какие обратные прокси-серверы имеют полную поддержку ETag? Я бы хотел, чтобы он на самом деле кэшировал несколько версий, чтобы я мог выполнять такие вещи, как сплит-тестирование, без необходимости отключения кэша. То есть HTTP / 1.1 указывает, что клиент может отправить If-None-Match с несколькими значениями ETag, и сервер должен ответить, с каким ETag сопоставлено (если есть). Если обратный прокси-сервер хранит несколько копий, а не только последнее увиденное значение, и позволяет серверу указывать при каждом запросе, который использовать, это было бы идеально.
nginx требует сторонних модулей для поддержки ETag. И их два .
источник
Поправьте меня, если я ошибаюсь, и я знаю, что это старый пост - но я бы хотел прокомментировать новых прохожих. Я считаю, что кэш обратного прокси-сервера не помогает так сильно, как вы хотели бы при использовании ETag.
Механизмы кэширования проверки используют исходный сервер для проверки того, является ли ETag (или дата последнего изменения) в запросе все еще действительным (совпадает или не совпадает с etag ресурсов, в зависимости от того, какой заголовок используется, или был / не был изменен с даты, указанной в запросе).
Это означает, что кэш обратного прокси-сервера, такой как Varnish, будет по-прежнему передавать этот запрос на исходный сервер. Он может ответить запросом, а не обработать его сервером, но вы не сохранили двустороннюю передачу на исходный сервер.
Браузеры могут кэшировать ответы и обрабатывать ответ 304 в любом случае, поэтому личный кэш пользователя может лучше подходить для этого, чем использование обратного прокси-сервера (YMMV, особенно в масштабе, и в зависимости от вашего варианта использования, конечно. хочу сделать предположения о ваших приложениях).
Из спецификации 13.3 :
и затем обратите внимание на 13.3.4 :
Таким образом, Varnish может вернуть ответ для вас, но у вас все еще есть обратный путь к серверу. Если вы можете использовать кэш приложения, такой как APC или memcache, то это все же может стоить того. Однако кэширование проверки обычно лучше для экономии полосы пропускания, чем для экономии ресурсов сервера.
Кэширование валидации лучше всего оставить клиенту (браузер или код API).
Использование модели Expiration для кэширования - это то, где кеш с обратным прокси-сервером действительно сияет. Это позволяет вообще пропустить попадание на исходный сервер. Используя
Expires
,Cache-Control
,Date
и т.д., это лучший (опять же , ИМО) механизм обратного прокси - кэша в кэш может вернуть ответ, предполагая , что его не затхлый, никогда не попав сервер происхождения.источник
Вы можете посмотреть на Apache TrafficServer , который, кажется, имеет то, что вам нужно .
источник
На сегодняшний день я считаю, что до сих пор нет прокси, которые полностью поддерживают эту спецификацию HTTP. Итак, около года назад я решил написать свой собственный, используя Node.js и MongoDb.
https://github.com/colinmollenhour/node-caching-proxy
источник