Używam modułu równoważenia obciążenia Rackspace, który pozwala mi skonfigurować mój klucz ssl / pem w panelu administracyjnym. Wszystko działa dobrze, mogę używać zarówno protokołów http, jak i https. Ale jeśli spróbuję przekierować http na https przy użyciu:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... dostaję pętlę przekierowania. Zdaję sobie sprawę, że nie słucham portu 443, ale to dlatego, że moduł równoważenia obciążenia poradził sobie z tym. Próbowałem też owijać przepisywanie if ($scheme ~* http){
bezskutecznie.
Inną częścią mojego pytania jest to, że chcę usunąć www z adresu URL, czy mogę to zrobić za pomocą jednego przepisania? Czy powyższe przepisanie również nie powinno się tym zająć?
Dzięki za pomoc!
nginx
load-balancing
Jwerre
źródło
źródło
Odpowiedzi:
sciurus ma rację, ponieważ usługi równoważenia obciążenia w chmurze Rackspace ustawiają X-Forwarded-Proto na https, gdy SSL jest odciążany w module równoważenia obciążenia. Aby uniknąć pętli przekierowań w nginx, powinieneś być w stanie dodać do
location
sekcji w konfiguracji vhost:Powinno to uniknąć nieskończonej pętli przekierowania podczas przekierowywania żądań innych niż https na https.
źródło
Przy użyciu nginx wbudowanego w zmiennych serwerowych
$request_uri
i$server_name
można to zrobić bez użycia wyrażeń regularnych w ogóle. Dodaj następujące elementy dolocation
bloku serwera i gotowe:Zakłada się, że moduł równoważenia obciążenia wysyła
$http_x_forwarded_proto
nagłówek wraz z żądaniem do instancji zaplecza. Inne typowe nagłówki obejmują,$http_x_forwarded_scheme
a także just$scheme
.Więcej informacji można znaleźć w dokumentacji pułapek i typowych błędów nginx : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
źródło
$host
zamiast$server_name
Moduł równoważenia obciążenia zawsze mówi do ciebie przez http. Co się dzieje?
Kroki 2-4 powtarzają się, dopóki przeglądarka nie wykryje pętli przekierowań i nie poddaje się.
EDYCJA: Aby rozwiązać ten problem, przepisz tylko, gdy nagłówek X-Forwarded-Proto jest ustawiony na http. Ten nagłówek jest sposobem, w jaki moduł równoważenia obciążenia Rackspace informuje serwer WWW o protokole, za pośrednictwem którego otrzymał żądanie.
źródło