2016-08-02 3 views
0

먼저 특정 http URL을 해당 https로 리디렉션 한 다음 완전히 다른 https URL로 리디렉션해야합니다 (원래 HTTP를 리디렉션 할 수없는 이유를 묻지 마십시오. 최종 https URL, 이것은 클라이언트가 원하는 것이며 클라이언트는 항상 맞습니다!). 또한 원래 https를 다른 https로 리디렉션 할 수 있어야합니다.haproxy 모두 구성표와 위치를 함께 리디렉션합니다.

그래서, 내가 필요한 것은뿐만 아니라 =>https://another.foobar.comhttps://foo.bar.com 리디렉션으로, 다음 https://foo.bar.com =>https://another.foobar.comhttp://foo.bar.com =>https://foo.bar.com를 리디렉션 할 수있는 기능입니다.

현재 내가이 사용하고 단지 https://foo.bar.com =>https://another.foobar.com 리디렉션 : 포트 443에 초기 바인딩과

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

을, 그리고 내가 사용하는 것이 http를 https로 리디렉션 알고

redirect scheme https code 302 if !{ ssl_fc } 

(301 대신 코드 302를 사용하여 결국 another.foobar.com이 제거되므로 클라이언트의 브라우저에 리디렉션이 영구적으로 캐시되지 않도록해야합니다)

하지만 두 재배치를 모두 수행 할 수 있어야하며 둘을 결합하는 방법을 잘 모르겠습니다.

답변

0

문제가 바인딩 또는 ACL과 관련되어 있는지 확실하지 않습니다. 당신은 이미 당신의 질문에 대한 모든 대답을 가지고 있습니다. 간단한 프론트 엔드에서 이들을 감쌀 수 있습니다.

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 } 

if 이후의 ACL 사이의 간격은 AND로 해석됩니다. 호스트가 foo.bar.com 및 호스트가 foo.bar.com 및 사용하여 SSL 경우

  • https://another.foobar.com로 리디렉션 SSL
  • 을 사용하지 않는 경우
    • 가 HTTPS로 리디렉션 : 그래서 당신이 뭔가를 얻을 것이다
    +0

    좋습니다, 두 리디렉션이 모두 작동하는지 확실하지 않았습니다. 제안 해 주셔서 감사합니다. 또한 Strict-Transport-Security : "max-age = 31536000"설정에서 작업해야하지만, 같은 프론트 엔드에 추가 할 수 있다고 생각합니다. – HelenH

    +0

    @HelenH 옙 방금 방금 내 답에 추가했습니다. 나는 귀하의 경우 'if {ssl_fc}'가 필요하다는 것을 확신하지 못합니다. – ITChap