Использовать haproxy в качестве обратного прокси с приложением за интернет-прокси

Мне нужно интегрировать несколько веб-приложений как внутри, так и вне сайта под общим внутренним URL-адресом. Приложения на локальном уровне находятся в том же центре обработки данных, что и haproxy, но приложения за пределами площадки могут быть достигнуты только через прокси-сервер http, поскольку сервер, на котором работает haproxy, не имеет прямого доступа в Интернет. Поэтому я должен использовать HTTP-прокси-сервер, SOCKS тоже может быть вариантом.

Как я могу сказать haproxy, что бэкэнд может быть достигнут только через прокси? Я бы предпочел не использовать дополнительный компонент, такой как socksify/proxifier/proxychains/tsocks/... потому что это вводит дополнительные накладные расходы.

На этом рисунке показаны компоненты, участвующие в настройке: настройка haproxy с прокси

Когда я запускаю это на машине с прямым подключением к Интернету, я могу использовать эту конфигурацию, и она работает нормально:

frontend  main
    bind *:8000
    acl is_extweb1 path_beg -i /policies
    acl is_extweb2 path_beg -i /produkte

    use_backend externalweb1 if is_extweb1
    use_backend externalweb2 if is_extweb2

backend externalweb1
    server static www.google.com:80 check

backend externalweb2
    server static www.gmx.net:80 check

(Очевидно, это не те URL-адреса, с которыми я говорю, это просто пример)

Haproxy может проверять внешние приложения и направлять трафик на них:

Страница статистики HAproxy

В безопасной среде компании, в которой я работаю, я должен использовать прокси, а haproxy не может подключиться к внешним приложениям. Как включить haproxy для использования этих внешних серверов веб-приложений за HTTP-прокси (без проверки подлинности), предоставляя им доступ через общую страницу http/через браузер?

Ответ 1

Я был заинтригован, чтобы заставить его работать, но я действительно ничего не мог найти в документации по haproxy, поэтому немного искал google и нашел, что nginx может сделать трюк, но это не для меня, после немного больше googleing я закончил поиск конфигурации apache который работает.

вот важная часть:

Listen 80

SSLProxyEngine on

ProxyPass /example/ https://www.example.com/
ProxyPassReverse /example/ https://www.example.com/
ProxyRemote https://www.example.com/ http://corporateproxy:port

ProxyPass /google/ https://www.google.com/
ProxyPassReverse /google/ https://www.google.com/
ProxyRemote https://www.google.com/ http://corporateproxy:port

Я уверен, что должен быть способ перевести эту конфигурацию на nginx и даже на haproxy... если мне удастся найти время, я обновлю ответ с моими выводами.

для работы apache вам также нужно включить несколько модулей, я разместил репозиторий github с помощью базовую конфигурацию докеров, которая демонстрирует, что вы можете увидеть ее, чтобы увидеть полную рабочую конфигурацию.

Ответ 2

Как использовать делегат (http://delegate.org/documents/) для этого, как идея.

haproxy -> delegate -f -vv -P127.0.0.1:8081 PROXY=<your-proxy>

http://delegate.org/delegate/Manual.shtml?PROXY

Я знаю, что это не так элегантно, но это может сработать.

Я тестировал эту настройку с локальным кальмаром и этим зависанием

echo 'GET http://www.php.net/' |curl -v telnet://127.0.0.1:8081

Вызов curl вызывает вызов haproxy tcp.