Серверы · 3 min read · Jan 01, 2026

Размещение Varnish перед Apache на Ubuntu/Debian

Размещение Varnish перед Apache на Ubuntu/Debian

Версия 1.0, 15-10-2010
Следите за мной в Twitter

Varnish — это программное обеспечение с открытым исходным кодом “веб-ускоритель”, который вы можете использовать для ускорения вашего веб-сайта.

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

В этом руководстве мы сосредоточимся на последнем.
В этом режиме Varnish будет предотвращать неполные HTTP-запросы от достижения вашего веб-сервера Apache.

Это руководство основано на Ubuntu, но, вероятно, также будет работать на Debian.

Прежде всего, убедитесь, что вы используете Apache2 и что он настроен.

Установка Varnish

Это довольно просто, так как он находится в репозитории Ubuntu. Тем не менее, вы можете захотеть использовать репозиторий Varnish, чтобы убедиться, что у вас более новая версия. Чтобы добавить его, выполните следующее:

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

Обновите APT и установите Varnish:

sudo apt-get update
sudo apt-get install varnish

Отлично, теперь у вас есть Varnish, но нам все еще нужно его настроить.

Изменение настроек Varnish

Сначала мы должны изменить порт по умолчанию. Отредактируйте /etc/default/varnish:

vim /etc/default/varnish

Прокрутите немного вниз, пока не найдете раскомментированную строку, начинающуюся с “ DAEMON_OPTS “.

  • Измените :6081* на :80*, чтобы он слушал на порту HTTP по умолчанию.
  • измените default.vcl на что-то другое, я взял “mysite.vcl”.

Сохраните файл.

Отредактируйте VCL файл, который вы упомянули в предыдущем файле. В моем случае я буду редактировать /etc/varnish/mysite.vcl. Вставьте следующее содержимое:

## Перенаправить запросы на Apache, работающий на порту 8000 на localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Получить
sub vcl_fetch {
        ## Удалить заголовок X-Forwarded-For, если он существует.
        remove req.http.X-Forwarded-For;
        ## вставить IP-адрес клиента как X-Forwarded-For. Это нормальный IP-адрес пользователя.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Дополнительная безопасность, атаки "w00tw00t" довольно раздражающие, поэтому давайте заблокируем их, прежде чем они достигнут нашего веб-сервера
        if (req.url ~ "^/w00tw00t") {
                error 403 "Не разрешено";
        }
        ## Доставить контент
        return(deliver);
}

## Доставка
sub vcl_deliver {
        ## Мы будем скрывать некоторые заголовки, добавленные Varnish. Мы хотим убедиться, что люди не видят, что мы используем Varnish.
              ## Поскольку мы пока не кэшируем, зачем беспокоить людей, что мы его используем?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        ## Мы хотели бы скрыть заголовки X-Powered-By. Никто не должен знать, что мы можем запускать PHP и имеем версию xyz.
        remove resp.http.X-Powered-By;
}

Сохраните файл. Хорошо, это была часть Varnish. Не запускайте его пока.

Изменение настроек Apache

Хорошо, нам нужно заставить Apache2 слушать на localhost. Для этого требуется внести несколько небольших изменений.

vim /etc/apache2/ports.conf

Измените:

NameVirtualHost *:80
Listen 80

На:

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apache будет слушать на этом порту. Вам также нужно будет отредактировать ваши vhosts. Откройте ваш vhost(ы) и замените

на

Пока все хорошо. Теперь нам нужно установить дополнительный модуль Apache, чтобы убедиться, что IP-адрес пользователя будет правильным. Поскольку Varnish в основном общается с Apache2, вы увидите 127.0.0.1 как IP-адрес посетителя.

apt-get install libapache2-mod-rpaf

Модуль RPAF (Reverse Proxy Add Forward) обеспечит замену IP 127.0.0.1 на IP, установленный в X-Forwarded-For, установленный Varnish.

Перезапуск демонов

Перезапустите Apache:

/etc/init.d/apache2 restart

Проверьте, связан ли он с правильным IP/портом, выполнив:

netstat -lp | grep apache2

Если вы видите:

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

Это правильно. В противном случае вы сделали ошибку. Хорошо, теперь нам нужно перезапустить Varnish, чтобы он слушал на порту 80.

/etc/init.d/varnish restart

Мы проверяем это снова, выполнив:

netstat -lp | grep varnish

Результат будет:

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd  
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(Да, varnish также слушает на любом IPv6 адресе).

Итак.. Теперь мы разместили Varnish перед Apache2. Мы можем проверить, работает ли сайт, просто посетив его. Вы увидите сайт, как будто ничего не произошло. Вы можете протестировать это дальше, отключив apache. Вы тогда увидите страницу ошибки Varnish.

Дополнительные функции

Ну, вы можете захотеть изменить имя HTTP-сервера с “Apache” на что-то другое. Это можно сделать, отредактировав ваш VCL файл, расположенный в /etc/varnish. После:

sub vcl_fetch {

Добавьте:

## Удалить заголовок http.Server
unset obj.http.Server;
## Изменить заголовок http.Server на что-то другое
set obj.http.Server = "Incognito";

Очевидно, вы можете сделать его похожим на что угодно. Например, Yourdomain.com. Пожалуйста, обратите внимание, что все домены на этом сервере будут использовать одно и то же имя сервера.

Ну, вот и все. Теперь у вас есть обратный прокси перед вашим Apache!
С небольшими изменениями вы можете заставить его кэшировать или балансировать нагрузку.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.