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

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

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

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

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

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 stats page

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

2 ответов


Я был заинтригован, чтобы заставить его работать, но я действительно не мог найти ничего в документации haproxy, поэтому я немного погуглил и нашел, что 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 С базовой конфигурацией докера, которая демонстрирует, не стесняйтесь взглянуть на это, чтобы увидеть полную рабочую конфигурацию.


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

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

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

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

я протестировал эту настройку с помощью локального squid и этого вызова curl

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

завитка называют simluates на графических интерфейсов по протоколу TCP звонок.