[http] http를 https (ssl)로 리디렉션하는 HAProxy

부하 분산에 HAProxy를 사용하고 있으며 내 사이트에서 https 만 지원하기를 원합니다. 따라서 포트 80의 모든 요청을 포트 443으로 리디렉션하고 싶습니다.

어떻게해야합니까?

편집 : 쿼리 매개 변수를 유지하면서 https에서 동일한 URL로 리디렉션하고 싶습니다. 따라서 http://foo.com/barhttps://foo.com/bar로 리디렉션됩니다.



답변

나는 이것이 가장 큰 도움이된다는 것을 알았습니다 .

HAProxy 1.5 이상을 사용하고 프런트 엔드 구성에 다음 줄을 추가하면됩니다.

redirect scheme https code 301 if !{ ssl_fc }


답변

이전 답변에 대해 언급 할만한 평판이 충분하지 않아 Jay Taylor의 답변을 보완하기 위해 새 답변을 게시하고 있습니다. 기본적으로 그의 대답은 암시 적 리디렉션 인 리디렉션을 수행합니다. 즉, 302 (임시 리디렉션)를 발행하지만 질문에서 전체 웹 사이트가 https로 제공 될 것이라고 알리기 때문에 적절한 리디렉션은 301 (영구 리디렉션)이어야합니다. ).

redirect scheme https code 301 if !{ ssl_fc }

작은 변화로 보이지만 웹 사이트에 따라 영향이 클 수 있습니다. 영구적 인 리디렉션을 통해 브라우저에 더 이상 처음부터 http 버전을 검색하지 않아야 함을 알립니다 (향후 리디렉션 방지)-https의 시간 절약 사이트. 또한 SEO에 도움이되지만 링크의 주스를 ​​나누지는 않습니다.


답변

모든 트래픽을 리디렉션하려면 :

redirect scheme https if !{ ssl_fc }

단일 URL을 리디렉션하려면 (프런트 엔드 / 백엔드가 여러 개인 경우)

redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }


답변

http://parsnips.net/haproxy-http-to-https-redirect/ 에 따르면 다음을 포함하도록 haproxy.cfg를 구성하는 것만 큼 쉽습니다.

#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com

#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check


답변

모든 http를 https로 리디렉션하는 가장 확실한 방법은 다음과 같습니다.

frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

이것은 ‘code 301’을 사용하는 약간 더 멋지지만 클라이언트에게 그것이 영구적임을 알리는 것이 좋습니다. ‘mode http’부분은 기본 구성에서 필수적인 것은 아니지만 해를 끼칠 수는 없습니다. mode tcp내가했던 것처럼 기본 섹션에 있으면 필요합니다.


답변

user2966600 솔루션의 약간의 변형 …

단일 URL을 제외한 모든 URL 을 리디렉션하려면 (프런트 엔드 / 백엔드가 여러 개인 경우) :

redirect scheme https if !{ hdr(Host) -i www.mydomain.com } !{ ssl_fc }


답변

Jay Taylor가 말했듯이 HAProxy 1.5-dev에는 redirect scheme필요한 것을 정확히 수행 하는 구성 지시문이 있습니다.

그러나 1.5를 사용할 수없고 소스에서 HAProxy를 컴파일하려는 경우 redirect scheme기능을 백 포트하여 1.4에서 작동합니다. 여기에서 패치를받을 수 있습니다 : http://marc.info/?l=haproxy&m=138456233430692&w=2