부하 분산에 HAProxy를 사용하고 있으며 내 사이트에서 https 만 지원하기를 원합니다. 따라서 포트 80의 모든 요청을 포트 443으로 리디렉션하고 싶습니다.
어떻게해야합니까?
편집 : 쿼리 매개 변수를 유지하면서 https에서 동일한 URL로 리디렉션하고 싶습니다. 따라서 http://foo.com/bar 는 https://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