Веб-сервер apache является, пожалуй, самым популярным веб-сервером в интернете. Одной из причин его популярности является простота конфигурирования и модульность, которые позволяют использовать его практически для любых целей, вплоть до bittorent-трэкера.
Далее будет показано как настроить apache на сервере небольшой организации в качестве веб и прокси сервера одновременно. Плюсом такого решения будет уменьшение требований к памяти на сервере и, соответственно, повышение производительности. В качестве бонуса мы добавим к прокси-серверу фильтрацию рекламы с помощью adzapper.
Начальные условия:
- Сервер под управлением Ubuntu Server 8.04.1.
- Локальная сеть 192.168.2.0/255.255.255.0.
- Сайт организации somedomain.com.
Установим apache, adzapper, а так же модуль поддержки php5, который может потребоваться для работы сайта нашей организации:
apt-get install apache2 libapache2-mod-php5 adzapper
Сразу после установки подключим необходимые модули:
a2enmod proxy && a2enmod proxy_http && a2enmod rewrite && a2enmod cache && a2enmod disk_cache && a2enmod php5
Краткое описание подключаемых модулей:
| Модуль | Описание |
|---|---|
| proxy | Основной модуль для работы в качестве прокси. Необходим для всех модулей proxy_*. |
| proxy_http | Модуль для работы в качестве http-прокси. Остальные протоколы мы проксировать не будем. |
| rewrite | Знаменитый модуль для подмены URL. Необходим для работы adzapper. |
| cache | Основной модуль для поддержки кэширования. Необходим для всех модулей cache_*. |
| disk_cache | Модуль для хранения кэша на диске. |
| php5 | Модуль для поддержки php-скриптов. Необходим только если корпоративный сайт написан на php. |
Далее переходим к настройке. Для этого первым делом открываем в редакторе файл /etc/apache2/mods-enabled/proxy.conf и приводим его к следующему виду:
<IfModule mod_proxy.c>
# Включаем проксирование
ProxyRequests On
# Перенаправление запросов на "родительский" прокси.
# Если необходимости в таком перенаправлении нет - достаточно
# просто закомментировать строку.
ProxyRemote * http://127.0.0.1:8080
# Разрешаем перезапись URL и подключаем adzapper
RewriteEngine On
RewriteLock /var/lock/apache2/rewrite-adzapper
RewriteMap adzap prg:/usr/bin/adzapper.wrapper
# Разрешаем проксировать запросы с локалхоста и локальной сети
<Proxy *>
AddDefaultCharset off
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.2.0/255.255.255.0
</Proxy>
ProxyVia On
</IfModule>
Затем открываем файл /etc/adzapper.conf и снимаем комментарий со строки:
NO_CHANGE_VALUE="NULL"
Подробнее о настройке adzapper можно прочитать тут. Закончив настройку перезапускаем apache:
/etc/init.d/apache2 restart
Теперь можно попробовать протестировать прокси-сервер, указав в настройках браузера в качестве прокси-сервера адрес нашего сервера (прошу прощения за тавтологию) и порт 80.
К сожалению, apache не умеет работать в качестве прозрачного прокси-сервера, однако тут на помощь приходит transproxy, о настройке которого уже писалось ранее. Единственное отличие от той конфигурации - запросы будут перенаправляться на порт 80, а не 8123.
Логи прокси-сервера будут писаться туда же, куда и логи виртуального хоста по умолчанию, то есть в файл /var/log/apache2/access.log. Соответственно, можно на основании этого файла генерировать статистику с помощью webalizer или awffull, но эту задачу мы оставим читателю.
Итак, задача почти решена. Осталось разместить на сервере виртуальный хост с сайтом компании. Для этого создаём файл /etc/apache2/sites-available/somedomain.com следующего содержания:
<VirtualHost *:80>
ServerName somedomain.com
ServerAdmin admin@somedomain.com
DocumentRoot /home/webmaster/html
<Directory /home/webmaster/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/somedomain-error.log
CustomLog /var/log/apache2/somedomain-access.log combined
</VirtualHost>
Разрешаем использование этого сайта:
a2ensite somedomain.com
И перезапускаем веб-сервер:
/etc/init.d/apache2 restart
На этом пожалуй всё. Приятной работы!

PycmaM 2008-09-17 08:48:11 (#)