#haproxy
#haproxy
Вопрос:
Я пытаюсь заставить HAProxy вести себя как HTTP-прокси, за исключением того, что переданные URL-адреса должны быть перенаправлены на внешнюю службу, которая предоставляет только прокси-API на основе HTTPS REST.
Итак, что-то вроде:
# HAProxy running on 127.0.0.1:8888
curl -x http://127.0.0.1:8888 http://www.example.com
использовал бы мой сервер HAProxy, работающий на 127.0.0.1:8888
, для пересылки запроса на http://www.example.com
сторонний HTTP REST на основе прокси-API, используя формат: https://url-privacy-service.com/api/v1/?apikey=YOUR_API_KEYamp;url=http://www.example.com
Целью этого было бы разрешить использовать REST based https://url-privacy-service.com
в качестве стандартного HTTP-прокси на различных устройствах с помощью HAProxy, находящегося впереди.
Вот что я собрал до сих пор в моей конфигурации HAProxy:
frontend urlprivacy
bind 127.0.0.1:8888
use_backend urlprivacy-backend
backend urlprivacy-backend
acl https ssl_fc
http-request set-uri https://url-privacy-service.com/api/v1/?api_key=YOUR_API_KEYamp;url=https://%[req.hdr(Host)]%[path]?%[query]
http-request set-method GET
server url-privacy-service.com:443 check-ssl ssl verify none
Почему я пытаюсь отправить запрос через curl -x http://127.0.0.1:8888 http://www.example.com
, я столкнулся с ответом об ошибке:
<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>
Я могу успешно вызвать url-privacy-service.com
REST API, поэтому я знаю, что их служба работает должным образом. Таким образом, я знаю, что конфигурация HAProxy явно неверна, я просто не уверен, что делать, чтобы сделать это правильно. При необходимости я могу запустить другие http-прокси (например, tinyproxy) для облегчения.
Ответ №1:
Я сомневаюсь, что это вообще может быть достигнуто. Если запрос https передается через порт 443, для этого требуется SSL. Если SSL запроса https доступен, мы можем просто добавить правило перенаправления в интерфейс ssl для хоста следующим образом:
redirect scheme http if { hdr(Host) -i https://url-privacy-service.com } { ssl_fc }
Для перенаправления на https вам, вероятно, потребуется привязка к порту 443 с использованием соответствующего SSL-сертификата. Это основное ожидание браузера.
ПРИМЕЧАНИЕ: приведенное выше правило перенаправления является лишь иллюстрацией и может не работать без надлежащего SSL-сертификата.
Ответ №2:
Невозможно сделать то, что вы предлагаете, поскольку прокси-сервер forward не сможет просматривать полезную нагрузку, которую он просто передает через данные с информацией, предоставленной в CONNECT
команде, полезная нагрузка будет зашифрована в случае HTTPS, поэтому такая информация, как путь и запрос, недоступна для HAProxy.установите соединение от имени клиента со сторонним приложением.