Вход
Русский
USD
Цены в иностранной валюте приведены информационно

Как кэшировать с помощью Varnish?

Решение идеально подходит для кэширования страничек на веб-сервере

Данное решение идеально подходит для кэширования страничек на веб-сервере.

Инсталляция и запуск Varnish

Инструмент хорош тем, что его получится установить практически на все существующие дистрибутивы юниксов, линуксов. Если хотите поставить Varnish на Debian, то наберите в командной строке:

sudo apt-get install varnish

Архитектура

Чаще всего решение устанавливается перед веб-серверами на порт 80. Поэтому на Varnish будут поступать все пользовательские запросы. Однако, не всегда на данный порт инструмент Varnish получится инсталлировать, поэтому в качестве альтернативы можно использовать порт 6081. Это вариант, если решение хуже обрабатывает запросы, нежели Nginx. Вы также можете связать Varnish с Nginx, поставив второй на 80 и 81, а первый на 6081 порт. В нашем материале мы рассмотрим случай, когда решение Varnish ставится на 80 порт.

Как включить кэш?

Если ставить на Debian, то придется настраивать параметры запуска инструмента. Это можно сделать в файле:

nano /etc/default/varnish

Нам нужно найти параметр daemon_opts, в котором требуется прописать:

DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-t 120 \
-s malloc,256m" 

В данном случае мы по умолчанию прописали время кэширования 120 сек, а также объем 256 Мб. При необходимости вы можете указать свои желаемые параметры.

Библиотека VCL

С ее помощью получится гибко настраивать функционирование кэша. Это можно сделать посредством конфигурационного файла:

nano /etc/varnish/default.vcl

Внутри файла находится несколько секций. Нам потребуются адреса серверов для дальнейшей работы. На них Varnish будет передавать запросы, если информация в кэше отсутствует. Ответ сервера также будет подвергаться кэшированию. Наберите:

backend www { 
	.host = "127.0.0.1"; 
	.port = "81";
} 

Мы прописали функцию отправки запросов на сервер со стороны инструмента Varnish на 81 порт. На нем должен быть доступен наш ресурс. Главный сервер тоже нужно перенести туда же. Если вы используете Nginx, то напишите:

server {
	listen 81; ...
} 

Теперь нужно перезапустить Varnish, чтобы наши изменения вступили в силу. Для этого наберите код:

/etc/init.d/varnish restart

Имейте ввиду, что VCL – это почти полноценный язык для разработки. Его инструкции находятся в файле default.vcl, поэтому туда и нужно записывать все ваши пользовательские параметры. При этом, нужно обязательно убирать комментарии с нужных секций.

Другие возможности Varnish

  1. Cookie и статистика. Если у запросов установлены Cookie по умолчанию, то Varnish не будет проводить их кэширование. При помощи специальной процедуры vcl_recv получится вырезать Cookie-файлы. Это делается вот так:
    sub vcl_recv { 
    ... 
    	if (req.url ~ "\.(css|js|png|gif|jp(e)?g)") {
    		unset req.http.cookie;
    	}
    ... 
    return (lookup);
    } 
  2. Файлы большого объема. Часто бывает так, что на ресурсе хранятся фото большого размера или видеоролики. Забивать ими кэш — не самая лучшая идея. Чтобы решить эту проблему, воспользуйтесь инструкцией pass. Наберите:
    sub vcl_recv {
    …
    	if (req.url ~ "\.(mp4|mp3|avi)") {
    		return (pass);
    	}
    …
    return (lookup);
    } 
  3. TTL или время кэша. При необходимости, с помощью VCL получится изменить период кэширования. Вы сможете для разных условий задать желаемое время. Для этого нам потребуется набрать код:
    sub vcl_recv {
    	set req.grace = 2m;
    	if (req.url ~ "\.(png|jpe?g|gif)") {
    		set req.grace = 1h;
    	}
    } 
    
    sub vcl_fetch {
    	set beresp.grace = 1h;
    } 
  4. Динамические страницы.Вы сможете также кэшировать динамические страницы посредством специального механизма ESI. Вы просто разделяете запросы на тематические блоки и кэшируете те, которые остаются постоянными.

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

Опубликовано: Апрель 11, 2017