7

Ich weiß, dass diese Frage schon einmal gestellt wurde, aber nichts scheint für mich zu arbeiten. Ich habe mehrere verschiedene Dinge ausprobiert, wie die in diesen Fragen beschrieben Antworten:Elastische Bohnenstange Http Umleiten zu Https

How to get Elastic Beanstalk nginx-backed proxy server to auto-redirect from HTTP to HTTPS? Redirecting EC2 elb from http to https

Keiner von ihnen zu arbeiten scheinen. Ich bin ein Aws Noob, also bin ich mir nicht ganz sicher, wie das Bearbeiten von Konfigurationsdateien funktioniert - oder ob ich etwas falsch gemacht habe.

Mein Setup ist folgende:

Meine aktuelle nginx.config Datei in meinem .ebextensions Ordner (habe diese von this article):

012.351.
files: 
    "/tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf" : 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     upstream nodejs { 
      server 127.0.0.1:8081; 
      keepalive 256; 
     } 
     server { 
      listen 8080; 
      set $fixedWWW ''; 
      set $needRedir 0; 
      # nginx does not allow nested if statements 
      # check and decide on adding www prefix 
      if ($host !~* ^www(.*)) { 
       set $fixedWWW 'www.'; 
       set $needRedir 1; 
      } 
      # what about that https? the traffic is all http right now 
      # but elastic load balancer tells us about the original scheme 
      # using $http_x_forwarded_proto variable 
      if ($http_x_forwarded_proto != 'https') { 
       set $needRedir 1; 
      } 
      # ok, so whats the verdict, do we need to redirect? 
      if ($needRedir = 1) { 
       rewrite ^(.*) https://$fixedWWW$host$1 redirect; 
      } 
      location/{ 
       proxy_pass http://nodejs; 
       proxy_set_header Connection ""; 
       proxy_http_version 1.1; 
       proxy_set_header  Host   $host; 
       proxy_set_header  X-Real-IP  $remote_addr; 
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
      } 
      gzip on; 
     } 

Aber das scheint nichts zu tun. Mir sind die Ideen ausgegangen. Ich bin mir nicht sicher, ob mir ein Schritt oder etwas fehlt, aber ich weiß nicht, was ich tun soll. Als Workaround habe ich meine Angularjs-Front-End-Umleitung Non-https-Anfragen, aber das ist zu hacky und einige der DOM-Rendern vor der Umleitung, würde ich gerne auf dem Load Balancer umleiten - wo es umleiten sollte.

+0

Auf einen Blick Ihre Nginx Konfiguration korrekt aussieht. Es prüft den Header x-forwarded-proto und leitet, falls nicht, 'https' um. Es sieht so aus, als würden Sie auch von der nackten Domain zur www-Subdomain umleiten, funktioniert das? Sind Sie sicher, dass die nginx-Konfiguration tatsächlich auf Ihre BeanStalk-Server angewendet wird? –

+0

Ich habe gerade die nackte Domäne auf www in Route 53 gezeigt, und dann zeigt das www auf EB. Diese Überprüfung ist im Moment überflüssig. Wie überprüfe ich, ob diese Datei die Standarddatei überschreibt? – KDogg

+1

[Was hast du KDogg gemacht] (https://xkcd.com/979/) ?? Ich habe das gleiche Problem! –

Antwort

2

Es sieht so aus, als ob Sie versuchen, sowohl eine Umleitung für Nicht-WWW als auch für Nicht-HTTPS-Verbindungen durchzuführen. Haben Sie den einfacheren Fall von nur http: // -> https: // ausprobiert?

if ($http_x_forwarded_proto = "http") { 
    return 301 https://$host$request_uri; 
} 

Manchmal ist es einfacher, es über zwei Umleitungen zu handhaben, ein von HTTP auf HTTPS und einem aus nicht-WWW WWW. In der Tat, wenn Sie Ihre Website über HSTS (https-Everywhere) registrieren, benötigen sie diese Art von Ansatz.

Edit: Auch habe gerade bemerkt, die erste Zeile Ihrer Konfiguration, können Sie versuchen, die nginx Datei Injektion direkt:

files: 
    "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" :