Как установить Varnish + Apache2 на Ubuntu 16

Люба х...ня

Varnish — это гибкий инструмент для ускорения работы сервера. Не буду писать много текста о нем, этой информации более чем достаточно в интернете.

Здесь я опишу процесс установки, проблемы, которые могут возникнуть и их решения.

Ставим Apache2

sudo apt-get update
sudo apt-get install apache2

Для теста переходим по http://localhost. Открылась стандартная заглушка, значит дальше.

Ставим Varnish

sudo apt-get install varnish

Настройка Varnish

Мы настроим связь с Apache2 по следующему алгоритму: Varnish слушает 80 порт, а зв'связь с Apache2 осуществляется через 81 порт.
Откроем файл конфигурации

nano /etc/default/varnish

Меняем:

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

На:

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

Теперь нужно изменить конфигурацию Varnish VCL.

nano /etc/varnish/default.vcl
backend default {
    .host = "127.0.0.1";
    .port = "81";
    }

Базовые настройки Varnish завершена.

Настройки Apache2

Нам нужно указать Apache2 чтобы слушал 81 порт.

sudo nano /etc/apache2/ports.conf

Меняем дефолтный 80 порт на 81.

NameVirtualHost 127.0.0.1:81
Listen 127.0.0.1:81

Осталось изменить виртуальный хост. Для этой статьи я создал новый дроплет в DigitalOcean, поэтому здесь дефолтный хост (000-default.conf). Если у вас есть другие хосты, не забудьте поменять настройки и в них.

nano /etc/apache2/sites-enabled/000-default.conf

Меняем порт:


 ... 

Все. Осталось перезагрузить Apache2 и Varnish, чтобы задействовать конфиги.

sudo service apache2 restart
sudo service varnish restart

И проверить результат.

Если у вас возникла ошибка ERR_CONNECTION_REFUSED, не страшно. Сперва посмотрим, какие порты использует Varnish

ps aux | grep vcache
vcache 15569 0.0 0.7 125044 7816 ? Ss 08:20 0:00 /usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

        vcache 15581 0.0 9.3 272012 94900 ? Sl 08:20 0:00 /usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Мы видим, что порт 6081 до сих пор задействован. Проблему я нашел в этом файле:

nano /lib/systemd/system/varnish.service

Меняем

[...]
    ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
[...]

на

[...]
    ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
[...]

Опять перезапуск сервисов

systemctl daemon-reload
systemctl restart apache2.service
systemctl restart varnish.service

Можно посмотреть статистику работы командой:

varnishstat

И финальный тест:

curl -I http://sever_ip 

 

HTTP/1.1 200 OK
    [...]
    Content-Type: text/html
    X-Varnish: 32771
    Age: 0
    Via: 1.1 varnish-v4
    [...]
Расскажите нам о своем проекте!