Переход к предыдущей публикации Поддержка шифрования SSL в Apache (HTTPs) Установка eAccelerator для работы с PHP5 [FreeBSD 6.3 & Apache 1.3] Переход к следущей публикации

Apache веб сервер в качестве прокси сервера [mod_proxy]

Воскресенье, 24 февраля, 2008 22:20:52 EET

Исправления от 23 марта, 2009 12:55:55

Apache в качестве проки сервера | apache, apache freebsd, apachectl, FreeBSD, httpd, httpd.conf, proxy, unix, прокси сервер, mod_proxy, программы для unix В предыдущих статьях приводился пример настройки и использования Apache в качестве веб сервера. Почитать об этом можно здесь и здесь. Однако Apache также можно использовать нестандартным для него способом - в качестве простого прокси сервера. Функцию прокси в Apache подключает модуль mod_proxy. Настройка занимает всего несколько минут и несколько строк в конфигурационном файле httpd.conf. В принципе, на мой взгляд Apache - это не самый удачный способ организовать прокси для большого числа клиентов, но раз в Apache такая возможность ей, рассмотрим ее.

Первым делом следует помнить о безопасности. В сети Интернет достаточно много открытых прокси серверов, отчасти образовавшихся от того, что кто-то установил какое-либо программное обеспечение и неправильно его настроил. Чем чревато наличие открытого (неавторитативного) прокси в своей сети, думаю, пояснять не стоит.

Для того, чтобы Apache смог начать обрабатывать прокси запросы, нам следует в конфигурационный файл /usr/local/etc/apache/httpd.conf включить поддержку модуля mod_proxy. Проверьте, на всякий случай, что у Вас в httpd.conf присутствуют строчки: - в секции LoadModule

 LoadModule proxy_module       libexec/apache/libproxy.so

и в секции AddModule

 AddModule mod_proxy.c

По-умолчанию, этот модуль подключается со всеми остальными. Кстати, об этом, точнее о потенциальной опасности при использовании этого модуля, предупреждает программа установки Apache, после инсталяции его из портов:

===> SECURITY REPORT:
      This port has installed the following files which
      may act as network servers and may therefore
      pose a remote security risk to the system.
/usr/local/libexec/apache/libproxy.so

Далее, (у меня перед описанием виртуальных хостов) следует прописать директивы для работы прокси сервера.

### Enable Proxy via Apache web server ###

 ProxyRequests On
 ProxyVia On

 <Directory proxy:*>
  Order Deny,Allow
  Deny from all
  Allow from 192.168.0.0/24
 </Directory>

 CacheRoot "/usr/local/www/proxy"
 CacheSize 10240
 CacheGcInterval 4
 CacheMaxExpire 24
 CacheLastModifiedFactor 0.1
 CacheDefaultExpire 1
 CacheDirLevels 3
 CacheDirLength 1
 NoCache providers.net mp3site.com videoarchive.net

##############################

После добавления этих строк перезапускаем Apache через apachectl restart. Пропишите в своем браузере в качестве прокси IP адрес Вашего сервера, порт 80 и попробуйте запросить какой-либо узел. После первого же запроса, в каталоге /usr/local/www/proxy появится дерево каталогов-подкаталогов в стиле squid. В этих каталогах будет храниться кеш прокси сервера. Касательно директив:

  • ProxyRequests - разрешает (On) или запрещает (Off) обработку прокси запросов.
  • ProxyVia - устанавливает режим передачи HTTP заголовков. При значении On - прокси сервер будет перенаправлять все заголовки браузера клиента к запрашиваемому узлу. Возможны также значения Off, Full и Block. Full добавляет в заголовок версию прокси сервера, а вот Block удаляет все исходящие заголовки Via. С таким значением можно настроить анонимный прокси сервер.
  • Контейнер Directory proxy:* описывает права доступа к прокси серверу. Все настройки доступа в нем по аналогии с остальными в файле httpd.conf. Вышеуказанный пример запрещает в первую очередь доступ к прокси для всех, а потом разрешает его для сети 192.168.0.0/24. Внимание! Если не уверены в том, что пишите здесь, лучше прежде почитайте документацию, иначе ошибка в правилах доступа может обернуться для Вас “дырявым” прокси!
  • CacheRoot - прописывает путь корневого каталога кеша прокси сервера. В нем будут автоматически созданы все необходимые каталоги. Без указания этой директивы функция прокси сервера работать не будет.
  • CacheSize - максимально допустимый размер кеша в килобайтах. В вышеприведенном примере кеш равен 10 MB.
  • CacheGcInterval - определяет промежуток времени через который прокси сервер будет проверять свой кеш и удалять файлы, если размер кеша превышает CacheSize. Поддерживаются значения с “плавающей” точкой. Тоесть можно указать значение 0.5 - для проверки кеша каждые полчаса.
  • CacheMaxExpire - указывает время “жизни” в часах, для каждого HTTP документа, который был закеширован. Через это время документ будет удален.
  • CacheLastModifiedFactor. Если узел, с которого запрашивается документ, не отдает время истечения срока жизни документа (Expiry period), то этот срок будет установлен по следущей формуле: [Истечение срока жизни = Время с момента последнего изменения * CacheLastModifiedFactor]. Если документ был изменен 10 часов назад, а CacheLastModifiedFactor равен 0.1 то срок жизни документа в кеше истечет через 10 * 0.1 = 1 час.
  • CacheDefaultExpire установит значение времени истечения срока жизни документа (expiry time) в часах, если документ был получен по протоколу, который не поддерживает передачу этого заголовка.
  • CacheDirLevels - установит значение уровней каталогов кеша прокси сервера.
  • CacheDirLength - устанавливает количество символов в названии каталогов кеша.
  • NoCache - указывает на доменные имена, с которых запрошенные документы не будут кешированы.

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

Все логи доступа через прокси Apache будет писать в свой лог (Custom) по умолчанию, прописанный как основной лог файл доступа. У меня это /var/log/apache/httpd-access.log. Ошибки сервер будет записывать в /var/log/apache/httpd-error.log. Как переназначить лог файл (чтобы прокси запросы не смешивались в логах с запросами к основному web серверу) я не знаю, не нашел. Возможно, mod_proxy этого не поддерживает.

Более подробную информацию можно получить на странице модуля mod_proxy.

Похожие публикации

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)