2017-12-02 6 views
10

Ich muss mehrere Web-Anwendungen On-Premise und Off-Site unter einer gemeinsamen intern gehosteten URL integrieren. Die lokalen Anwendungen befinden sich im selben Datencenter wie haproxy, aber die Offsite-Anwendungen sind nur über einen HTTP-Proxy erreichbar, da der Server, auf dem haproxy läuft, keinen direkten Internetzugang hat. Daher muss ich einen http Internet Proxy verwenden, SOCKS könnte auch eine Option sein.Verwenden Sie Haproxy als Reverse-Proxy mit einer Anwendung hinter Internet-Proxy

Wie kann ich Haproxy mitteilen, dass ein Backend nur über einen Proxy erreichbar ist? Ich würde lieber nicht verwenden Sie eine zusätzliche Komponente wie Socksify/Proxifier/Proxychains/tsocks/..., da dies zusätzliche Overhead verursacht.

Dieses Bild zeigt die Komponenten in der Einrichtung beteiligt: ​​ haproxy setup with proxy

Wenn ich dies auf einer Maschine laufen mit direkter Internetverbindung ich diese Konfiguration verwenden können, und es funktioniert gut:

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 

(Offensichtlich sind dies nicht die URLs, mit denen ich spreche, dies ist nur ein Beispiel)

Haproxy ist in der Lage, die externen Anwendungen und Routen zu überprüfen Verkehr zu ihnen:

HAproxy stats page

In der sicheren Umgebung des Unternehmens ich arbeite ich habe einen Proxy verwenden und haproxy nicht an die externen Anwendungen verbinden. Wie kann ich Haproxy aktivieren, um diese externen Webanwendungsserver hinter einem http-Proxy zu verwenden (keine Authentifizierung erforderlich), während der Zugriff auf diese über eine gemeinsame http-Seite/über den Browser möglich ist?

Antwort

3

Ich war fasziniert, es Arbeit zu machen, aber ich kann wirklich nichts in der haproxy Dokumentation finden, so gegoogelt ich ein wenig und fand, dass nginx könnte den Trick tun, aber es hat für mich nicht, nach einem bisschen mehr von googeln ich fand eine Konfiguration für apache, die funktioniert.

hier ist der wichtige Teil:

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 

ich bin ziemlich sicher, dass es einen Weg geben, sollte diese Konfiguration zu übersetzen zu nginx und sogar zu HAProxy ... wenn ich es schaffe, die Zeit finden i aktualisieren die Antwort mit meinen Ergebnissen.

für Apache Sie auch ein paar Module ermöglichen arbeiten sollen, habe ich ein bis github repository mit einer grundlegenden Docker Konfiguration, die auf, die einen Blick haben, zögern Sie präsentiert die volle Arbeitskonfiguration zu sehen.

4

Wie wäre es mit delegate (http://delegate.org/documents/) für diese, nur als eine Idee.

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

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

Ich weiß es nicht, dass elegant ist, aber es könnte funktionieren.

ich dieses Setup mit einem lokalen Tintenfisch getestet haben und diese

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

Der Curl Anruf simluates die haproxy tcp Anruf rufen curl.

+1

Ich denke, das ist nicht ganz das, was ich brauche. Ich müsste ein "curl http (s): // myserver.local/foo" machen und das sollte intern eine statische Seite wie "http (s): // www.google.com" * + * die nicht statisch aufrufen Teil der URL, in diesem Fall '/ foo'. Kurz gesagt: Dies sollte Proxy zu "http (s): // www.google.com/foo" umkehren und diesen Code zurückgeben, als ob er von myserver.local selbst geliefert worden wäre. – Marged

+0

Das klingt anders als der ursprüngliche Beitrag. Was Sie wissen wollen, ist ein Host-Header neu geschrieben wie 'http-Antwort ersetzen-Header Host www \ .google \ .com myserver \ .local' Doc: http://cbonte.github.io/haproxy-dconv/1.8/configuration. html # 4.2-http-response – Aleksandar

+0

Ich denke, der wichtigste Punkt ist Haproxy zu einem Proxy verwenden, der Rest ist auch wichtig, aber kommt später – Marged

Verwandte Themen