У меня есть система, запускающая nginx / php-fpm / varnish / wordpress и amazon s3.
Сейчас я посмотрел на множество файлов конфигурации при настройке системы, и во всех них я нашел что-то вроде этого:
/* If the request is for pictures, javascript, css, etc */
if (req.url ~ "\.(jpg|jpeg|png|gif|css|js)$") {
/* Remove the cookie and make the request static */
unset req.http.cookie;
return (lookup);
}
Я не понимаю, почему это сделано. Большинство примеров также запускают NginX как веб-сервер. Теперь вопрос в том, зачем вам использовать кеш лака для кэширования этих статических файлов.
Для меня гораздо больше смысла кэшировать только динамические файлы, чтобы php-fpm / mysql не попадал так сильно.
Я прав или я что-то здесь упускаю?
ОБНОВИТЬ
Я хочу добавить некоторую информацию к вопросу на основе ответа.
Если у вас динамичный веб-сайт, содержание которого на самом деле сильно меняется, чечинг не имеет смысла. Но если вы используете WordPress для статического сайта, например, это может сохраняться в кэше в течение длительного времени.
Тем не менее, для меня важнее статический конент . Я нашел ссылку с некоторыми тестами и тестами для разных приложений кеша и приложений веб-сервера.
http://nbonvin.wordpress.com/2011/03/14/apache-vs-nginx-vs-varnish-vs-gwan/
На самом деле NginX быстрее получает статический контент, поэтому имеет смысл просто пропустить его. NginX прекрасно работает со статическими файлами.
-
Кроме того, большую часть времени статический контент отсутствует даже в самом веб-сервере. В большинстве случаев этот контент хранится где-то на CDN, может быть, в AWS S3, что-то в этом роде. Я думаю, что кеш лака - это последнее место, где вы хотите хранить статический контент.
источник
if (req.url ~ "\.(png|gif|jp(e?)g|avi|flv|mp(e?)g|mp4|mp3)"){return(pass);}
в vcl_recv (). По сути, я не хочу кэшировать медиа - но определенно хочу кэшировать html (php) и даже js / css (теория заключается в том, что изображения вносят меньший вклад в воспринимаемое время загрузки страницы, чем макет).Я думаю, вы можете что-то упустить.
По определению динамические файлы меняются. Как правило, они изменяются путем выполнения какого-либо запроса к базе данных, который влияет на содержимое страницы, обслуживаемой пользователем. Поэтому вы не хотите кэшировать динамический контент. Если вы это сделаете, это просто становится статическим контентом и, скорее всего, статическим контентом с некорректным контентом.
В качестве простого примера, скажем, у вас есть страница с именем пользователя, вошедшего в систему, в верхней части страницы. Каждый раз, когда эта страница загружается, выполняется запрос к базе данных, чтобы определить, какое имя пользователя принадлежит зарегистрированному пользователю, запрашивающему страницу, которая обеспечивает отображение правильного имени. Если вы кешируете эту страницу, запрос к базе данных не будет выполнен, и все пользователи увидят одно и то же имя пользователя в верхней части страницы, и, скорее всего, это не будет их имя пользователя. Этот запрос должен выполняться при каждой загрузке страницы, чтобы обеспечить правильное имя пользователя для каждого пользователя. Поэтому он не кешируется.
Расширьте эту логику до чего-то более проблемного, такого как пользовательские разрешения, и вы поймете, почему динамическое содержимое не должно кэшироваться. Если база данных не используется для динамического содержимого, CMS не может определить, имеет ли пользователь, запрашивающий страницу, разрешения на просмотр этой страницы.
Статический контент по определению одинаков для всех пользователей. Поэтому нет необходимости выполнять запрос к базе данных для настройки этой страницы для каждого пользователя, поэтому имеет смысл кэшировать ее, чтобы исключить ненужные запросы к базе данных. Изображения являются отличным примером статического содержимого: вы хотите, чтобы все пользователи видели одно и то же изображение заголовка, одинаковые кнопки входа и т. Д., Поэтому они являются отличными кандидатами для кэширования.
В приведенном выше фрагменте кода вы видите очень типичный фрагмент Varnish VCL, который заставляет кэшировать изображения, CSS и JavaScript. По умолчанию Varnish не будет кэшировать какие-либо запросы с cookie-файлами. Логика заключается в том, что если в запросе есть файл cookie, то должна быть какая-то причина, по которой серверу нужен этот файл cookie, чтобы он требовался на серверной части и передавался через кэш. В действительности, многие CMS (Drupal, Wordpress и т. Д.) Прикрепляют файлы cookie практически ко всему, независимо от того, нужны они или нет, поэтому обычно пишут VCL, чтобы удалить файлы cookie из содержимого, которое, как известно, является статическим, что, в свою очередь, приводит к кешированию Varnish. Это.
Есть смысл?
источник
Для динамического содержимого некоторые виды, такие как биржевые котировки, на самом деле часто меняются (обновляются каждую секунду
SaaS server
из abackend server
), но могут запрашиваться еще чаще (десятки тысячsubscription clients
):В этом случае кэширование при
SaaS server
обновлении за секундуbackend servers
позволяет удовлетворить запросы десятков тысячsubscription users
.Без кеша на SaaS-сервере эта модель просто не работала бы.
источник
Кэширование статических файлов с помощью Varnish выиграет с точки зрения разгрузки Nginx. Конечно, если у вас много статических файлов для кеширования, это приведет к потере оперативной памяти. Тем не менее, Varnish имеет приятную особенность - он поддерживает несколько бэкэндов хранилища для своего кеша.
Для статических файлов: кеш на HDD. Для всего остального: кеш на RAM.
Это должно дать вам более полное представление о том, как реализовать этот сценарий: http://www.getpagespeed.com/server-setup/varnish-static-files-cache
источник