Я настраиваю временный экземпляр haproxy, чтобы помочь протестировать новый сервер для приложения iphone. Вместо того, чтобы иметь специально созданное приложение или джейлбрейк, я планирую настроить прокси, через который будут проходить все данные с телефона, но при этом он должен совпадать с заголовками хоста и пересылать их на новые серверы, которые еще не работают. Короче говоря, я хочу, чтобы haproxy действовал как открытый прокси, за исключением некоторых конкретных имен хостов. Сопоставление имен хостов и их пересылка работает отлично, но я не могу заставить работать бит открытого прокси. Я использую стандартный пакет haproxy 1.4.18 в Ubuntu Precise со стандартными глобальными настройками, плюс следующие настройки прокси:
frontend myapp
bind 0.0.0.0:8080
default_backend passthrough
acl mydomain hdr_end(Host) .example.com
use_backend front if mydomain
backend front
server front 127.0.0.1:80
backend passthrough
server ???
Таким образом, интерфейс находится на порту 8080, по умолчанию отправляя запросы на passthrough
бэкэнд. Перед этим он проверяет acl, чтобы узнать, относится ли запрос к имени хоста в моем домене, и, если да, вместо этого перенаправляет его в локальное приложение.
Проблема в том, что passthrough
бэкэнд. Я хочу, чтобы он передавал запросы непосредственно на запрошенный хост, а не на локальную конечную точку. Конфигурация, которую я поместил туда, не будет работать, но я не знаю, что в ней должно быть сказано. Например, если я сделаю запрос на http://www.serverfault.com
, он не будет соответствовать моему ACL, поэтому я бы хотел, чтобы он перенаправлялся непосредственно на serverfault, а не на локальный сервер. Я не уверен, какая директива сделает это в бэкэнде, или есть ли какая-то директива фронтенда, которая сделает это. Что касается прокси, это более или менее бесполезно.
(Да, я знаю, что открытые прокси - это плохо; это временная тестовая конфигурация, которая работает в интерактивном режиме всего несколько минут за раз)
Обновить: Я обнаружил option http_proxy
делает именно то, что мне нужно, кроме того, что он не выполняет поиск DNS, а только явные IP-адреса, поэтому такой бэкэнд почти готов:
backend passthrough
option http_proxy
option httpclose
Я знаю, что, вероятно, мог бы использовать что-то еще, но мне просто действительно нравится haproxy!
Невозможно настроить haproxy, чтобы он делал это за вас. Бэкэнд-серверы в haproxy должны быть явно названы.
Не могли бы вы вместо этого просто использовать выделенный DNS-сервер, чтобы направить телефон на нужный сервер?
вы можете использовать haproxy как простой http-прокси со следующей конфигурацией -
backend direct_forward
option httpclose
option http_proxy
вы можете узнать больше об этом Вот