Использовать 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.