Używam HAProxy do równoważenia obciążenia i chcę, aby moja witryna obsługiwała tylko protokół HTTPS. Dlatego chciałbym przekierować wszystkie żądania z portu 80 do portu 443.
Jak bym to zrobił?
Edycja: chcielibyśmy przekierować do tego samego adresu URL pod adresem https, zachowując parametry zapytania. W związku z tym http://foo.com/bar przekierowałoby do https://foo.com/bar
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. Dokumentacja dotycząca przekierowania http w ALOHA HAProxy 7.0 nawet wspomina, że „ składnia obu dyrektyw jest taka sama, co oznacza, że przekierowanie jest teraz uważane za starsze, a konfiguracje powinny zostać przeniesione do formularza przekierowania żądania http ”. Wnioskuję, nie będąc całkowicie pewnym, że to samo wyjaśnienie dotyczy nowszych wersji otwartej wersji oprogramowania HAProxy.Nie mam wystarczającej reputacji, aby skomentować poprzednią odpowiedź, więc zamieszczam nową, uzupełniającą odpowiedź Jaya Taylora. Zasadniczo jego odpowiedź wykona przekierowanie, choć niejawne przekierowanie, co oznacza, że wygeneruje 302 (tymczasowe przekierowanie), ale ponieważ pytanie informuje, że cała witryna będzie obsługiwana jako https, to odpowiednim przekierowaniem powinno być 301 (stałe przekierowanie ).
Wydaje się, że to niewielka zmiana, ale wpływ może być ogromny w zależności od strony internetowej, przy stałym przekierowaniu informujemy przeglądarkę, że nie powinna już szukać wersji http od początku (unikając przyszłych przekierowań) - oszczędność czasu dla https witryn. Pomaga również w pozycjonowaniu, ale nie pozwala na dzielenie soku z linków.
źródło
Aby przekierować cały ruch:
redirect scheme https if !{ ssl_fc }
Aby przekierować pojedynczy adres URL (w przypadku wielu frontendów / backendów)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
źródło
Zgodnie z http://parsnips.net/haproxy-http-to-https-redirect/ powinno być tak proste, jak skonfigurowanie haproxy.cfg tak, aby zawierał następujące elementy.
źródło
Najlepszym gwarantowanym sposobem przekierowania wszystkiego z http na https jest:
Jest to trochę bardziej wyszukane przy użyciu „kodu 301”, ale równie dobrze może dać klientowi znać, że jest to trwałe. Część „tryb http” nie jest niezbędna przy domyślnej konfiguracji, ale nie zaszkodzi. Jeśli masz
mode tcp
sekcję defaults (tak jak ja), to jest to konieczne.źródło
Niewielka odmiana rozwiązania user2966600 ...
Aby przekierować wszystko oprócz jednego adresu URL (w przypadku wielu frontend / backend):
źródło
Jak powiedział Jay Taylor, HAProxy 1.5-dev ma
redirect scheme
dyrektywę konfiguracyjną, która spełnia dokładnie to, czego potrzebujesz.Jeśli jednak nie możesz używać wersji 1.5 i masz ochotę skompilować HAProxy ze źródła, dokonałem backportowania tej
redirect scheme
funkcjonalności, aby działała w wersji 1.4. Możesz pobrać łatkę tutaj: http://marc.info/?l=haproxy&m=138456233430692&w=2źródło
źródło
W nowszych wersjach HAProxy zalecane jest użycie
przekierować ruch http na https.
źródło
Jeśli chcesz przepisać adres URL, musisz zmienić virtualhost w swojej witrynie, dodając następujące linie:
Ale jeśli chcesz przekierować wszystkie swoje żądania na porcie 80 do portu 443 serwerów WWW za proxy, możesz wypróbować następujący przykład conf na swoim haproxy.cfg:
Mam nadzieję, że to ci pomoże
źródło
Dlaczego nie używasz list ACL do rozróżniania ruchu? na mojej głowie:
Jest to uzupełnienie tego, co odpowiedział Matthew Brown.
Zobacz dokumentację ha , wyszukaj takie rzeczy, jak hdr_dom i poniżej, aby znaleźć więcej opcji ACL. Istnieje wiele możliwości wyboru.
źródło
Dodaj to do konfiguracji frontendu HAProxy:
źródło
Można to zrobić w ten sposób -
Każdy ruch docierający do http będzie przekierowywany do https
źródło
instrukcja przekierowania jest starsza
zamiast tego użyj przekierowania żądania http
źródło
Po prostu:
źródło