Apache-proxy : proxy-сервер на базе HTTP-сервера Apache, управление HTTP-заголовками
Apache можно использовать в качестве proxy-сервера. Для этого ему нужен стандартный модуль mod_proxy. Поддерживается оба варианта проксирования. Кроме того, Apache может проксировать не только HTTP, но я здесь буду говорить про HTTP.
Обычный proxy
Обычный proxy-сервер работает по схеме:
[клиент] <-> [proxy] <-> [любой сервер в интернете]
Чтобы Apache работал в качестве такого proxy, добавляем в httpd.conf виртуальный хост с примерно таким настройками:
# слушаем порт 7000
Listen 7000
# на этом порту организуем виртуальный хост
<VirtualHost *:7000>
# разрешаем доступ только с localhost
# (можно прописать несколько машин, с которых
# разрешён доступ)
<Proxy *>
Order deny,allow
Deny from all
Allow from localhost
</Proxy>
# включаем проксирование
ProxyRequests On
# включаем протоколирование
CustomLog /usr/home/a/local/test/logs/proxy_log common
# можно добавить кэширование, см. документацию
# на модуль mod_cache
</VirtualHost>
После этого появляется прокси на порту 7000.
Управление заголовками
Для управления заголовками требуется модуль mod_headers.
Заголовки, исходящие от браузера, управляются директивой RequestHeader. Например, можно изменить заголовок User-Agent, запретить передачу Referer и Cookie:
RequestHeader set User-Agent «Mozilla/5.0 (http://michurin.com.ru)»
RequestHeader unset Referer
RequestHeader unset Cookie
Заголовки, приходящие клиенту (браузеру), управляются директивой Header. Например, можно запретить cookie и спрятать от клиентов характеристики серверов:
Header unset Server
Header unset Set-Cookie
Хотя перегибать тут не надо.
proxy-акселератор
Акселератор работает иначе, он организует не доступ клиента к другим серверам, а доступ клиентов к вашему серверу. Схема такова:
[клиенты] <-> [proxy-акселератор] <-> [ваш сервер]
Допустим ваш сервер работает на порту 8080, а акселератор организует доступ к нему через порт 80. Тогда минимальная настройка такова:
Listen 8080
<VirtualHost *:8080>
# настройка VirtualHost на порту 8080
</VirtualHost>
Listen 80
<VirtualHost *:80>
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
CustomLog /usr/home/a/local/test/logs/proxy_log common
</VirtualHost>
Через такой proxy очень удобно отлаживать web-приложения, которые в реальной жизни будут работать по подобной схеме, за всякими балансировщиками. Это позволяет очень точно сымитировать реальную рабочую среду.