Con el fin de Sinatra a montar correctamente la URL utilizada para redirecciones, que tiene que ser capaz de determinar si la solicitud usa ssl, de modo que la redirección se puede hacer usando http
o https
según corresponda.
Obviamente, la llamada real a thin no está utilizando ssl, ya que esto está siendo manejado por el servidor web front-end, y la solicitud de proxy está en claro. Por lo tanto, necesitamos una forma de decirle a Sinatra que debe tratar la solicitud como segura, incluso si no está realmente usando SSL.
En última instancia, el código que determina si la solicitud debe tratarse como segura está en los métodos Rack::Request#ssl?
y Rack::Request#scheme
. Los métodos scheme
examinan el hash env
para ver si hay una o varias entradas presentes. Uno de estos es HTTP_X_FORWARDED_PROTO
que corresponde al encabezado HTTP X-Forwarded-Proto
. Si esto está establecido, entonces el valor se usa como esquema de protocolo (http
o https
).
Así que si agregamos este encabezado HTTP a la solicitud cuando se envía un proxy desde nginx al back-end, Sinatra podrá determinar correctamente cuándo redirigir a https
. En nginx podemos agregar encabezados a las solicitudes de proxy con proxy_set_header
, y el esquema está disponible en el $scheme
variable.
por lo que añadir la línea
proxy_set_header X-Forwarded-Proto $scheme;
a la configuración de nginx después de la línea proxy_pass
debe hacer que funcione.
¿Agregar 'proxy_set_header X-Forwarded-Proto $ scheme;' después de su línea 'proxy_pass' ayuda? – matt
Debería escribir eso como una respuesta ... solucionó mi problema. ¡Gracias! –