Ho un sito web in binari 4 beta. È in esecuzione su Nginx + Unicorn. Voglio nginx per inoltrare il protocollo di richiesta ('http' o 'https') all'unicorno in modo che possa lavorare con loro. Tuttavia non sono in grado di farlo funzionare.Nginx non può inoltrare correttamente il protocollo di richiesta a monte
Inserisco <%= request.ssl? %>
e <%= request.protocol %>
nel file di visualizzazione per il test. Il mio file di configurazione del server nginx è il seguente:
upstream unicorn {
server unix:/tmp/unicorn.blog.sock fail_timeout=0;
}
server {
listen 80;
listen 443;
server_name example.com;
root /home/example;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-Proto https; # <--- Line 1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Ssl on; # <--- Line 2
proxy_redirect off;
proxy_pass http://unicorn;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
Ho trovato che le 2 linee contrassegnate non funzionano correttamente. Ecco il mio risultato del test:
=================
Linea 1 commentata, Linea 2 ha commentato troppo:
visita http://the.url
<%= request.ssl? %> : false
<%= request.protocol %> : http
visita https://the.url
<%= request.ssl? %> : false
<%= request.protocol %> : http
=================
Linea 1 commentata, Linea 2 non O è linea 2 commentata, linea 1 non è O nessuno dei due è in commento
visita http://the.url
<%= request.ssl? %> : true
<%= request.protocol %> : https
visita https://the.url
<%= request.ssl? %> : true
<%= request.protocol %> : https
=================
Vale a dire, se una di queste due righe appare, nginx inoltra "https" a monte indipendentemente dal protocollo effettivo. Ma se nessuna di queste due linee appare, nginx inoltra "http" a monte indipendentemente dal protocollo effettivo.
Per favore qualcuno può dirmi come scrivere il file di configurazione nginx in modo che possa inoltrare il protocollo correttamente? Grazie mille.
Grazie, ha funzionato. – blacktulip
Intendo dire che il secondo metodo ha funzionato. Il primo no. – blacktulip
Per me, il primo metodo ha funzionato perfettamente (quando aggiunto al blocco 'location @ unicorn'), ma ero solo interessato allo schema (per costruire correttamente gli URL nella mia app Rails). – spume