Назад | Перейти на главную страницу

Использование HAProxy для прозрачной пересылки и выборочного перенаправления

Я настраиваю временный экземпляр 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

вы можете узнать больше об этом Вот