Два в одном: Apache в качестве веб и прокси-серверов одновременно

()

Веб-сервер 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

На этом пожалуй всё. Приятной работы!

Ключевые слова: apache, transproxy, proxy, mod_proxy.

Комментарии:

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

Не пойму, зачем использовать веб-сервер в качестве прокси? Только для того, чтобы не заводить отдельного демона? Чем такое решение лучше связок tp+polipo+bfilter либо squid'a?

MooSE 2008-09-17 15:49:44 (#)

Пускал я всё это на очень слабой железке с малым количеством памяти. Выиграл по памяти достаточно сильно:)

Anonymous 2010-05-28 07:09:03 (#)

А как читать и анализировать логи, если в апаче ip пользователя это localhost??? Получается КТО лазил увидеть нельзя, а можно узнать только КУДА. А без КТО, толку мало.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE