2016-10-10 4 views
0

Ich habe extrem wenig Wissen über Haproxy. Wurde eine Konfiguration zu testen, woHaproxy - Forward-Anfrage an S3 Hosted Site

S3 Website gehostet (Route 53 Alias) - content.mydomain.com
URL Landung auf haproxy - www.mydomain.com/getfiles/

Ist es möglich, reroute www zu umleiten .mydomain.com/getfiles/zu content.mydomain.com (s3 gehostete Website).

konnte ich es in einer anderen Anwendung auf dem gleichen Server mit der unten genannten Konfigurations

acl display-s3-content path_beg /getfiles/ 
    use_backend my-content if display-s3-content 

backend my-content 
    reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test www.mycomain.com:1936 

läuft umleiten, aber wenn ich versuche, es zu umleiten gehosteten Seite s3, funktioniert es nicht. Unten ist das Backend für die nicht funktionierende Konfiguration

reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test1 content.mydomain.com 

Vielen Dank!

+0

Dies ist nicht "Umleiten", es ist "Weiterleitung". –

+0

Wenn also eine Anfrage mit einem Pfad beginnt, der mit '/ getfiles /' beginnt, möchten Sie diese Anfrage an den Bucket senden. Ich kann eine Antwort veröffentlichen, die veranschaulicht, wie das gemacht wird, aber zuerst muss ich wissen, was Sie mit dem '/ getfiles /' am Anfang des Pfades machen wollen, so dass wir nach dem richtigen Pfad im Bucket suchen. Entfernen Sie es? Ersetzen Sie es durch etwas anderes? Welche Version von HAProxy? –

+0

hey michael, ich werde froh sein, den richtigen Ansatz darauf zu kennen, haproxy - 1.5.2 und ich glaube, dass es entfernt werden muss, wie ich denke derzeit s3 wirft 301, weil es content.mydomain.com sein muss, um die anzuzeigen Inhalt. Vielen Dank! –

Antwort

3

Wie Sie in den Kommentaren erwähnt, das funktioniert:

reqirep ^Host: Host:\ content.mydomain.com 

Die Idee ist es, die Host Header auf den Wert einzustellen, der S3 erwartet.

Ein etwas saubere Ansatz ist dies:

http-request set-header Host content.mydomain.com 

ich sage „besser“, weil es einen neuen/besser/sicheren Mechanismus für die Header-Manipulation verwendet, aber es ist im Grunde das gleiche Ziel erreichen: die Request-Header zu ändern zu was der Zielserver (S3) erwartet. Die Verwendung des http-request Ansatzes ist sicherer/sauberer, da es "schlauer" ist, wie die Anforderung manipuliert wird - es ist viel einfacher, das Protokoll unter Verwendung von req[i]rep vollständig zu brechen als mit http-request.

Ursprünglich haben Sie gefragt, /getfiles/test.jpg Zuordnung zu /test.jpg im Eimer. Das Umschreiben ist sehr einfach und sauber in HAProxy 1.6 und höher:

http-request set-path %[path,regsub(^/getfiles,)] 

... aber in 1.5 haben Sie reqirep seit dem regsub (regex Substitution) Konverter zu verwenden ist nicht verfügbar:

reqirep ^([^\ :]+)\ +/getfiles(.*) \1\ \2 

Dies entspricht der Zeile GET (HEAD, POST usw.) aus der Anforderung und entfernt die zusätzliche /getfiles aus dem Pfad. Das Einschließen der : in das Ausschlussmuster verhindert, dass es mit einem anderen Header übereinstimmt. Ein ähnliches Muster kann verwendet werden, um vor dem Senden der Anforderung an S3 ein Präfix hinzuzufügen (z. B. eine Release-Version usw.).