Obecnie mam ELB obsługujący zarówno http://www.example.org, jak i https://www.example.org .
Chciałbym to skonfigurować, aby każde żądanie wskazujące na http://www.example.org było przekierowywane na https://www.example.org .
ELB wysyła żądania https jako żądania HTTP, więc używając:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
nie będzie działać, ponieważ żądania wysłane do https://www.example.org będą nadal wysyłane do portu 80 na nginx.
Wiem, że można to przepisać jako
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Ale wszystko, co przeczytałem, mówi, że if
należy unikać za wszelką cenę w konfiguracji nginx, i tak byłoby w przypadku każdego pojedynczego żądania. Oznacza to również, że muszę skonfigurować specjalną oddzielną konfigurację dla kontroli poprawności ( jak opisano tutaj : „… gdy jesteś za ELB, gdzie ELB działa jako punkt końcowy HTTPS i wysyła tylko ruch HTTP do twojego serwera, przerwać zdolność do odpowiedzi za pomocą odpowiedzi HTTP 200 OK w celu sprawdzenia poprawności, którego potrzebuje ELB ”).
Zastanawiam się nad umieszczeniem loginu w kodzie aplikacji sieciowej zamiast konfiguracji nginx (i na potrzeby tego pytania załóżmy, że jest to aplikacja oparta na Django), ale nie jestem pewien, czy byłoby to większe obciążenie ogólne niż if
konfiguracja w.
Odpowiedzi:
Jeśli tak działa poprawnie, nie bój się tego. http://wiki.nginx.org/IfIsEvil
źródło
location {}
, wserver {}
zamian. (Ale proszę dać mi znać, jeśli jest to nieprawidłowe!)Konfiguracja NGINX
źródło
HTTP:1443
. OdrzucaHTTP:80
ponieważ przekierowanie 301.To rozwiązanie wykorzystuje logikę warunkową, ale jak sugeruje przyjęta odpowiedź, również uważam, że jest to w porządku. Zobacz: /programming/4833238/nginx-conf-redirect-multiple-conditions
Nie wymaga to również otwierania żadnych dodatkowych portów w ustawieniach bezpieczeństwa aws dla obrazu. Możesz zakończyć ssl w AWS LB i skierować ruch https do portu http 80 w twojej instancji.
W tym przykładzie sprawdzanie poprawności LB trafia / kondycja na porcie 80, który kieruje do serwera aplikacji, więc sprawdzanie poprawności sprawdza zarówno nginx, jak i twoja aplikacja oddychają.
źródło
Możesz teraz utworzyć nowego nasłuchiwania w Ustawieniach modułu równoważenia obciążenia AWS, który przekierowuje port HTTP 80 do portu HTTPS 443. Nie musisz już dotykać konfiguracji nginx / apache.
źródło