Як встановити 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
    [...]
Розкажіть нам про свій проект!