Chcę przekierować wszystkie żądania HTTP do żądania https w ELB . Mam dwie instancje EC2. Używam nginx na serwerze. Próbowałem przepisać pliki conf Nginx bez żadnego sukcesu. Bardzo chciałbym uzyskać porady na ten temat.
redirect
nginx
amazon-ec2
https
amazon-elb
Amit Badheka
źródło
źródło
Odpowiedzi:
Moduły równoważenia obciążenia aplikacji AWS obsługują teraz natywne przekierowanie HTTP na HTTPS.
Aby włączyć to w konsoli, wykonaj następujące czynności:
To samo można osiągnąć za pomocą interfejsu wiersza polecenia, jak opisano tutaj .
Można to również zrobić w Cloudformation, gdzie musisz skonfigurować obiekt Listener w następujący sposób:
Jeśli nadal używasz klasycznych modułów równoważenia obciążenia, skorzystaj z jednej z konfiguracji NGINX opisanych przez innych.
źródło
instances
karty)ELB ustawia
X-Forwarded-Proto
nagłówek, możesz go użyć do wykrycia, czy pierwotne żądanie dotyczyło HTTP i przekierowania do HTTPS.Możesz spróbować tego w swoim
server
conf:Spójrz na dokumentację ELB .
źródło
nginx
konfiguracji, ale zasada ma zastosowanie do każdego serwera WWW.Miałem ten sam problem, w mojej sytuacji HTTPS był obsługiwany w całości przez ELB i nie znałem domeny źródłowej z wyprzedzeniem, więc skończyło się na zrobieniu czegoś takiego:
Następnie oczywiście wskazując ELB „https” na port instancji 80, a następnie trasę „http” do portu instancji 81.
źródło
Amazon Elastic Load Balancer (ELB) obsługuje nagłówek HTTP o nazwie X-FORWARDED-PROTO. Wszystkie żądania HTTPS przechodzące przez ELB będą miały wartość X-FORWARDED-PROTO równą „HTTPS”. W przypadku żądań HTTP możesz wymusić HTTPS, dodając następującą prostą regułę przepisywania. U mnie działa dobrze!
Apache
W pliku .htaccess możesz dodać następujące wiersze:
Lub jeśli używasz vhost.conf do zarządzania wieloma domenami na tym samym serwerze internetowym EC2, możesz dodać następujący plik do vhost.conf (dodać go do domeny, w której chcesz używać https):
IIS
Zainstaluj moduł IIS Url-Rewrite, używając konfiguracyjnego GUI, dodaj następujące ustawienia:
Przeczytaj więcej tutaj
źródło
RewriteCond %{HTTP:X-Forwarded-Proto} !(https|^$)
Powyższe rozwiązania htaccess spowodowały niepowodzenie kontroli stanu ELB. Miałem problemy ze znalezieniem rozwiązania, dopóki nie znalazłem w Internecie artykułu, w którym ktoś miał te same problemy, co ja. Jego rozwiązaniem było dodanie tego na początku pliku htaccess zamiast tego:
Źródło: przekierowanie HTTP do HTTPS z AWS i ELB
źródło
Może to nie być rozwiązanie, którego możesz szukać, ale inną opcją może być użycie AWS CloudFront oprócz ELB. CloudFront daje możliwość przekierowania całego przychodzącego ruchu HTTP do HTTPS.
źródło
Miałem dziwny problem z konfiguracją nginx i ELB. Moja konfiguracja obejmowała 3 różne usługi w jednym nginx za ELB. I miałem problem z mieszaną zawartością: kiedy twoje żądanie do ELB to https, ale wewnątrz ELB tylko http, a serwer tworzy ścieżkę względną do statycznej za pomocą http, więc przeglądarka nie działa z problemem `` mieszanej zawartości ''. I muszę stworzyć rozwiązanie dla obu protokołów http / https bez żadnych przekierowań.
Oto konfiguracja znajdująca się w
nginx/conf.d/
folderze:Oznacza to, że będziemy mieć wiedzę, jaki jest prawdziwy protokół klienta. Jak widać, będziemy go mieli w
$switch
var. W tej chwili używasz tego we wszystkich miejscach, w których tego potrzebujesz:Dzięki ustawieniu HTTPS aplikacja php automatycznie wykryje właściwy protokół i starannie zbuduje ścieżkę względną, aby zapobiec problemom z mieszaną zawartością.
Z poważaniem.
źródło
Na podstawie odpowiedzi @ Ulli Jeśli chcesz skonfigurować go za pomocą Terraform , oto przykład>
Źródło
źródło
Utwórz plik
.ebextensions/00_forward_http_to_https.config
z następującą zawartością:Upewnij się, że wcześniej ustawiłeś zmienną środowiskową APP_URL z konsoli zarządzania AWS.
źródło