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-приложения, которые в реальной жизни будут работать по подобной схеме, за всякими балансировщиками. Это позволяет очень точно сымитировать реальную рабочую среду.


Комментарии запрещены.




Статистика