Как настроить кэширующий обратный прокси Squid 2.6 на Debian Etch
Версия и автор
Version 1.0
Author: Falko Timme
Введение
В этой статье описано, как настроить кэширующий обратный прокси на основе Squid 2.6 перед вашим веб-сервером (Apache) на Debian Etch. Если ваш сайт генерирует множество динамических запросов к базе данных, кэширование ответов на несколько минут или дольше может значительно уменьшить нагрузку на сервер. Эффект зависит от частоты обновления контента.
Важно: я не даю гарантии, что инструкции подойдут под вашу среду без адаптации.
1 Вводное замечание
В примере домен, который мы будем кэшировать, называется www.example.com и работает на Apache2. Squid устанавливается на той же машине и настраивается так, чтобы Apache слушал порт 8080, а Squid — порт 80. Все HTTP-запросы проходят через Squid, который отдает закэшированный ответ или пересылает запрос в Apache.
Вы также можете установить Squid на отдельной машине и оставить Apache на порту 80 — архитектура гибкая.
2 Подготовка бэкенд-сервера (Apache)
Squid передаёт оригинальный IP клиента в заголовке X-Forwarded-For. Чтобы логи Apache содержали реальный IP клиента, нужно заменить %h на %{X-Forwarded-For}i в LogFormat внутри /etc/apache2/apache2.conf:
| vi /etc/apache2/apache2.conf
| [...] #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...]
Далее откройте /etc/apache2/ports.conf и поменяйте порт прослушивания Apache на 8080:
vi /etc/apache2/ports.conf… и измените строку на:
| Listen 8080 |
Перезапустите Apache:
/etc/init.d/apache2 restart3 Установка и настройка Squid
Установите Squid командой:
apt-get install squidСоздайте резервную копию оригинального конфигурационного файла (/etc/squid/squid.conf):
cd /etc/squid/
mv squid.conf squid.conf_origФайл squid.conf_orig содержит около 4000 строк с комментариями и доступными опциями — рекомендуется изучить его.
Создайте новый squid.conf:
vi squid.conf| cache_mgr root # Basic parameters visible_hostname www.example.com # This line indicates the server we will be proxying for http_port 80 defaultsite=www.example.com vhost # And the IP Address for it - adjust the IP and port if necessary cache_peer 127.0.0.1 parent 8080 0 no-query originserver login=PASS acl apache rep_header Server ^Apache broken_vary_encoding allow apache # Where the cache files will be, memory and such cache_dir ufs /var/spool/squid 10000 16 256 cache_mem 256 MB maximum_object_size_in_memory 128 KB # Log locations and format #logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs % |
Это типичная конфигурация. Проверьте visible_hostname и cache_peer, при необходимости поправьте IP и порты. Опция login=PASS в cache_peer пропускает HTTP-аутентификацию (.htaccess) через прокси.
Если у вас есть залогиненные пользователи, которым нужно видеть персонализированный контент, кэш по умолчанию может не подойти — см. раздел «Когда это не подходит» ниже.
Измените права на squid.conf и перезапустите Squid:
chmod 600 squid.conf
/etc/init.d/squid restart3.1 Ротация логов
Если нужно заводить новые лог-файлы каждый день в полночь, используйте директиву logfile_rotate в squid.conf (например, 10 — хранить 10 старых файлов). Чтобы заставить Squid начать новые файлы, добавьте cron-задачу:
crontab -e| 0 0 * * * /usr/sbin/squid -k rotate &> /dev/null |
4 Полезные практики и безопасность
Важно: кэширование ускоряет отдачу контента, но может раскрывать чувствительные данные при неправильной настройке.
- Отключайте кэширование для страниц с авторизацией, персональными данными или с динамическим контентом, который должен быть свежим.
- Обновляйте права доступа к логам и конфигам: только root/proxy должны иметь запись.
- Отключите ненужные ACL и ограничьте доступ к административным интерфейсам Squid.
- Проверяйте заголовки Vary и Cache-Control на бэкенде: они определяют корректность кэширования.
5 Когда это не подходит
- Персонализированный контент для залогиненных пользователей (страницы с данными аккаунта).
- Частые обновления контента (мгновенные изменения, которые должны быть видны немедленно).
- API-запросы с динамическими параметрами, зависящими от сессии или токенов.
Если у вас такие случаи, используйте ACL и no_cache правила, чтобы исключить соответствующие URL/методы (например, POST, авторизационные эндпоинты).
6 Альтернативные подходы
- Reverse proxy на Nginx: легче настраивается для SSL-терминации и статического кэширования.
- CDN: отдаёт статику ближе к пользователю и снижает нагрузку на исходный сервер.
- Varnish: специализированный HTTP-акселератор с гибкими VCL-правилами для сложного кэширования.
Выбор зависит от задач: Squid хорош как универсальный прокси с поддержкой HTTP-кэширования и широким набором опций.
7 Чек-листы по ролям
Разработчик:
- Проверить заголовки Cache-Control и Vary на бэкенде.
- Покрыть сценарии с авторизацией тестами.
Системный администратор:
- Установить и протестировать Squid на тестовой машине.
- Настроить лог-ротацию и мониторинг дискового пространства.
DevOps/инженер релизов:
- Откатный план: вернуться к прямому проксированию на порт 80 при проблемах.
- Обновить документацию и runbook для инцидентов.
Критерии приёмки
- HTTP-запросы проходят через Squid (проверить заголовки и логи).
- Apache логирует реальный IP через %{X-Forwarded-For}i.
- Кэшируемые ресурсы отдаются Squid без обращения к Apache в течение ожидаемого TTL.
- Нет утечек персональных данных в кэше.
Краткий глоссарий
- Reverse proxy — промежуточный сервер, принимающий запросы от клиентов и пересылающий их на бэкенд.
- X-Forwarded-For — заголовок, содержащий IP-адреса клиентов при проксировании.
- ACL — набор правил доступа в Squid.
Примеры ошибок и как их обнаружить
- Неправильные логи (вместо реального IP — IP Squid): проверьте LogFormat в Apache.
- Неправильное кэширование персональных страниц: проверьте заголовки Cache-Control/Set-Cookie и ACL no_cache.
- Переполнение диска из-за cache_dir: мониторьте /var/spool/squid и настройте cache_dir/размеры.
Важно: прежде чем вводить Squid в продакшн, прогоните нагрузочное тестирование и проверьте сценарии авторизации.
Резюме
Настройка Squid 2.6 как кэширующего обратного прокси перед Apache на Debian Etch помогает снизить нагрузку на сервер при правильно настроенных правилах кэширования. Основные шаги: изменить LogFormat в Apache, перевести Apache на порт 8080, установить и сконфигурировать Squid, настроить ротацию логов и ACL для исключения персонализированного контента. Тестируйте и внедряйте поэтапно.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента