X-Forwarded-Proto für Rails hinter nginx hinter ELB

8

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.

%Vor%

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!

    
HungryCoder 25.08.2015, 01:23
quelle

2 Antworten

0

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.

    
HungryCoder 25.08.2015 15:34
quelle
0

Im Falle eines SSL-Offloads ist es sinnvoll, über plain HTTP (80) zu kommunizieren und rails config adjusted:

zu haben

config / 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.

    
Anatoly 25.08.2015 18:41
quelle

Tags und Links