Серверы · 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 updatesudo 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:8000Apache будет слушать на этом порту. Вам также нужно будет отредактировать ваши 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!
С небольшими изменениями вы можете заставить его кэшировать или балансировать нагрузку.
Get new posts in your inbox
No spam. Unsubscribe anytime.