부하 분산에 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