Ich bin ziemlich lange mit dieser Sache festgefahren. Ich würde es nicht schaffen. Ich habe alles ausprobiert, was ich mir vorstellen kann und / oder online gefunden habe.
Also, meine Bewerbung ist auf ELB (Web) gerichtet. ELB hört auf 80 und 443 und sendet Verkehr zu 80 (SSL wird hier beendet) an Mitgliedsinstanz (en), was nginx ist.
Nginx leitet App-Anfragen an eine andere ELB (App) vor mehreren Instanzen weiter. Diese Instanzen führen Puma aus.
Alles funktioniert gut, außer wenn ich versuche, eine URL zu besuchen (wo ich force_ssl
für diesen Controller benutzt habe) mit https
scheme, bekomme ich eine Umleitungsschleife.
Hier sehen meine nginx-Konfigurationen aus wie
%Vor% (Offensichtlich wird app_name
durch ansible ersetzt.)
Anstelle von $scheme
habe ich versucht, https
und $proxy_add_x_forwarded_proto
zu codieren, aber für mich hat keiner funktioniert. Ich bekomme immer noch die Schleife.
Dann habe ich angefangen, die env
in den Schienen zu inspizieren und ich sehe die folgenden Werte unabhängig von der Kopfzeile, die ich in nginx config eingestellt habe.
Ich bin mir nicht sicher, was ich falsch mache. Jede Hilfe wird geschätzt! Hinweis: Ich habe bereits alle gefundenen SO-Threads geprüft und keiner hat geholfen!
Ich habe eine Lösung gefunden, die funktioniert (obwohl ich mir nicht sicher bin, ob es richtig ist).
Wenn ich also den TCP-Listener auf 8080: 8080 einstelle und diesen von den Upstream-Einstellungen von nginx verwende, funktioniert alles einwandfrei. Das heißt web
Instanzen verbinden sich mit app
ELB auf TCP 8080. Ich sehe, dass das X-Forwarded-Proto korrekt übergeben wird.
Ich habe auch Listener zu 80 hinzugefügt, da dieser ELB als Ursprung der Cloudfront verwendet wird, der mit 80 verbunden ist.
Im Falle eines SSL-Offloads ist es sinnvoll, über plain HTTP (80) zu kommunizieren und rails config adjusted:
zu habenconfig / environments / production.rb
%Vor%Es hilft, eine Umleitungsschleife zu vermeiden und niemals HTTPS intern zwischen dem Load Balancer und dem Nginx-Server der Anwendung zu verwenden.
Sie haben auch erwähnt:
wo ich force_ssl für diesen Controller verwendet habe
Bitte verwenden Sie HTTPS überall auf der Website und leiten Sie 80- & gt; 443 auf der ELB-Ebene um.
Tags und Links nginx ruby-on-rails amazon-elb