Mam problemy z wymuszaniem HTTPS w witrynie wdrażanej za pomocą AWS Elastic Beanstalk.
Jest to aplikacja frontendowa wykorzystująca EmberJS. Od wielu dni chodzę w kółko, próbując dowiedzieć się, jak przekierować ruch HTTP na https. Używam Amazon Linux AMI na moim komputerze EC2.
Doszedłem do wniosku (wciąż nie jestem pewien, czy to prawda), że wymuszanie HTTPS nie obejmuje Elastic Beanstalk. Zezwalam zarówno na HTTP, jak i HTTPS przez moduł równoważenia obciążenia Elastic Beanstalk i próbuję przekierować na serwer.
To tutaj napotykam problemy. Znajduję wiele odpowiedzi na temat reguł przepisywania, bez mod_rewrite
których są one oparte na X-Forwarded-Proto
nagłówku, ale ten plik nie istnieje na moim komputerze EC2 zgodnie z wyszukiwaniem wyszukiwania.
Próbowałem również utworzyć plik konfiguracyjny w .ebextensions
katalogu, ale to też nie działało.
Najważniejsze, co próbuję zrobić, to skierować użytkowników do https, gdy próbują trafić na adres http. Wszelkie wskazówki lub sugestie są bardzo mile widziane, dzięki!
EDYCJA: Używam 64-bitowej wersji Debian jessie v1.4.1 z Pythonem 3.4 (wstępnie skonfigurowanym - dokerem)
źródło
Odpowiedzi:
Myślę, że musisz określić, jakiego środowiska Elastic Beanstalk używasz (patrz: Obsługiwane platformy ), ponieważ inne środowisko ma inną konfigurację.
Zasadniczo musisz dostosować:
Aby go dostosować, możesz użyć CLI lub
.ebextensions
.Możesz zaznaczyć opcję Włącz HTTPS i przekierowanie HTTP na AWS Elastic Beanstalk . Informuje o tym, jak skonfigurować elastyczny kontener Docker z pojedynczym dokowaniem do obsługi HTTPS i HTTP (przekierowanie do HTTPS). Możesz dostosować konfigurację do swoich potrzeb.
źródło
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
formacie.ssl_certificate /opt/ssl/default-ssl.crt;
Gdy otrzymam informacje o certyfikacie, daje mi to „ścieżkę”, ale jest to po prostu „/”Można to również zrobić nieco łatwiej, bez dotykania modułu równoważenia obciążenia, za pomocą
X-Forwarded-Proto
zestawu nagłówków ustawionego przez ELB. Oto, co skończyłem:źródło
Elastic Beanstalk nie obsługuje wielu portów z kontenera Single Docker, więc musisz obsłużyć to na poziomie proxy, jak sugerowano. Jednak instancja EC2 nie musi wiedzieć o certyfikacie, ponieważ można przerwać połączenie SSL w module równoważenia obciążenia.
W swoim
.ebextensions
katalogu utwórz konfigurację serwera proxy nginx, która zawiera dwie konfiguracje serwera; jeden, który proxyhttp://docker
(konfiguracja domyślna, port 80) i ten, który przekierowuje do https (wybrałem port 8080)..ebextensions/01-nginx-proxy.config
:Utwórz drugą konfigurację modułu równoważenia obciążenia EB i grup zabezpieczeń, który ustawia je w następujący sposób:
.ebextensions/02-load-balancer.config
:(Uwaga: nie zapomnij zastąpić SSLCertificateId i VpcId własnymi wartościami).
Każdy ruch na porcie 80 modułu równoważenia obciążenia (HTTP) trafi na port 8080 w instancji EC2, który przekierowuje do HTTPS. Ruch na porcie 443 w module równoważenia obciążenia (HTTPS) będzie obsługiwany przez port 80 w instancji EC2, która jest serwerem proxy dokera.
źródło
Korzystam z Terraform, aby umożliwić przekierowanie HTTP na HTTPS na ElasticBeanstalk,
Właśnie dodałem dodatkową Regułę Listenera
źródło