Sono abbastanza bloccato con questa cosa per un paio d'ore. In nessun modo potrei farlo funzionare. Ho provato tutto quello che posso pensare e/o trovato online.X-Forwarded-Proto per Rails dietro nginx dietro ELB
Quindi, la mia applicazione è puntata su ELB (web). ELB ascolta 80 e 443 e invia il traffico a 80 (SSL viene terminato qui) alle istanze membro che è nginx.
Richieste di app proxy Nginx su un altro ELB (app) di fronte a più istanze. Queste istanze eseguono puma.
Tutto funziona bene tranne quando provo a visitare un URL (dove ho usato force_ssl
per quel controller) con lo schema https
, ottengo un ciclo di reindirizzamento.
Ecco il mio file di configurazione nginx assomigliano
location @{{app_name}} {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_pass http://{{app_name}};
# limit_req zone=one;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
(Ovviamente app_name
ottiene sostituito da ansible.)
Invece di $scheme
, ho cercato hardcoding https
e $proxy_add_x_forwarded_proto
ma nessuno ha lavorato per me. Ho ancora il ciclo.
Quindi ho iniziato a ispezionare lo env
nelle guide e vedo i seguenti valori indipendentemente dall'intestazione che ho impostato in nginx config.
"SERVER_PROTOCOL"=>"HTTP/1.1",
"HTTP_X_FORWARDED_PROTO"=>"http",
"rack.url_scheme"=>"http",
Non sono sicuro di quello che sto facendo male. Qualsiasi aiuto apprezzato! Nota: ho già controllato tutti i thread SO trovati e nessuno ha aiutato!
Ok, ho nuove informazioni.Se proxy le richieste da nginx direttamente a un'istanza piuttosto che tramite l'app ELB, vedo che tutto funziona perfettamente ('" HTTP_X_FORWARDED_PROTO "=>" https ",' in rails). Quindi, significa che ELB sta eliminando quell'intestazione. Potrebbe essere collegato a questo fatto che l'app ELB ascolta 80 e invia a 8080 ed è per questo che aws spoglia quella intestazione? – HungryCoder