2016-08-02 32 views
0

Ich muss eine bestimmte HTTP-URL zunächst auf die entsprechende HTTPS und dann auf eine völlig andere HTTPS-URL umleiten (fragen Sie nicht, warum ich nicht einfach umleiten kann das Original http direkt auf die Endgültige https URL, das ist was der Client will und der Client hat immer Recht!). Außerdem muss ich in der Lage sein, die ursprünglichen https auch zu den verschiedenen https umzuleiten.Haproxy Redirect beide Schema und Standort zusammen

Also, was ich brauche, ist die Fähigkeit, als Umleitung https://foo.bar.com =>https://another.foobar.comhttp://foo.bar.com =>https://foo.bar.com und dann https://foo.bar.com =>https://another.foobar.com sowie zu umleiten.

Zeit zu umleiten nur https://foo.bar.com =>https://another.foobar.com ich dies mit:

acl is_new_portal hdr(host) -i foo.bar.com 
redirect location https://another.foobar.com code 302 if is_new_portal 

mit einer anfänglichen Bindung auf Port 443, und ich weiß, http auf https umgeleitet würde ich verwenden:

redirect scheme https code 302 if !{ ssl_fc } 

(mit Code 302 statt 301 als schließlich another.foobar.com wird entfernt, so dass ich nicht möchte, dass die Umleitung in den Browsern der Clients permanent zwischengespeichert wird)

aber ich muss in der Lage sein, beide Umzüge zu machen, und ich bin mir nicht sicher, wie Sie die beiden kombinieren?

Antwort

0

Ich bin mir nicht sicher, ob Ihr Problem mit der Bindung oder den ACLs zusammenhängt. Sie haben bereits alle Antworten auf Ihre Frage. Sie können sie in einem einfachen Frontend wickeln:

frontend main 
    bind :80 
    bind :443 ssl crt yourCertFile 

    acl is_new_portal hdr(host) -i foo.bar.com 
    redirect scheme https code 302 if !{ ssl_fc } is_new_portal 
    redirect location https://another.foobar.com code 302 if { ssl_fc } is_new_portal 

    http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubDomains;\ preload; if { ssl_fc } 

Der Raum zwischen ACLs nach dem, ob als AND interpretiert wird. So erhalten Sie so etwas wie:

  • auf https umgeleitet, wenn der Host foo.bar.com und nicht ssl mit
  • zu https://another.foobar.com umleiten, wenn der Wirt foo.bar.com und mit ssl
+0

Ok, ich war mir nicht sicher, ob beide Redirects bearbeitet werden würden, danke für den Vorschlag. Ich muss auch in einer "Strict-Transport-Security:" Max-Age = 31536000 "Einstellung arbeiten, aber ich schätze, ich kann das nur in das gleiche Frontend hinzufügen. – HelenH

+0

@HelenH yep Ich habe es gerade zu meiner Antwort hinzugefügt. Ich bin mir nicht sicher, ob in Ihrem Fall das 'if {ssl_fc}' benötigt wird – ITChap