Гид по технологиям

Как настроить кэширующий обратный прокси Squid 2.6 на Debian Etch

• 5 min read • DevOps • Обновлено 23 Nov 2025
Кэширующий обратный прокси Squid 2.6 на Debian Etch
Кэширующий обратный прокси 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 restart

3 Установка и настройка 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 %a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined # Example how to configure Squid to not log certain requests #acl dontlog urlpath_regex ^\/monit\/token$ #acl dontlog urlpath_regex ^\/server-status$ #acl dontlog urlpath_regex ^\/admedia\/reste_300x250.php$ #acl dontlog urlpath_regex ^\/admedia\/reste_120x600.php$ #acl dontlog urlpath_regex ^\/admedia\/reste_728x90.php$ #acl dontlog urlpath_regex ^\/geoip\/rectangle_forum_postbit.html$ #acl dontlog urlpath_regex ^\/geoip\/banner_iframe.php #acl dontlog urlpath_regex ^\/js\/amazon.js #acl dontlog urlpath_regex .js$ #acl dontlog urlpath_regex .css$ #acl dontlog urlpath_regex .png$ #acl dontlog urlpath_regex .gif$ #acl dontlog urlpath_regex .jpg$ #access_log /var/log/squid/access.log combined !dontlog cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log logfile_rotate 10 ## put this in crontab to rotate logs at midnight: ## 0 0 * * * /usr/sbin/squid -k rotate &> /dev/null hosts_file /etc/hosts # Basic ACLs acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl Safe_ports port 80 acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access allow localhost http_access allow all http_access allow all http_reply_access allow all icp_access allow all cache_effective_group proxy coredump_dir /var/spool/squid forwarded_for on emulate_httpd_log on redirect_rewrites_host_header off buffered_logs on # Do not cache cgi-bin, ? urls, posts, etc. hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? acl POST method POST no_cache deny QUERY no_cache deny POST # Example how to configure Squid to not cache certain URLs #acl adminurl urlpath_regex ^/myadminpanel #no_cache deny adminurl #acl phpmyadminurl urlpath_regex ^/phpmyadmin #no_cache deny phpmyadminurl |

Это типичная конфигурация. Проверьте visible_hostname и cache_peer, при необходимости поправьте IP и порты. Опция login=PASS в cache_peer пропускает HTTP-аутентификацию (.htaccess) через прокси.

Если у вас есть залогиненные пользователи, которым нужно видеть персонализированный контент, кэш по умолчанию может не подойти — см. раздел «Когда это не подходит» ниже.

Измените права на squid.conf и перезапустите Squid:

chmod 600 squid.conf
/etc/init.d/squid restart

3.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 для исключения персонализированного контента. Тестируйте и внедряйте поэтапно.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро