2011-12-14 21 views
6

Estoy implementando una aplicación en Heroku e intentando determinar si la solicitud que entra es segura (request.secure). Al principio, esto devuelve falso en heroku porque nginx maneja el trabajo SSL y se comunica a través de http simple al servidor de la aplicación. Por lo tanto permitir que el juego leer los encabezados que permiten que se conoce que es una petición segura agrego:XForwardedSupport para https play! soporte en Heroku que falla

XForwardedSupport = 127.0.0.1

Para application.conf como se recomienda en los tablones de anuncios de juegos. Sin embargo, todas las solicitudes (excepto las imágenes) fallan sin error. Parece que algo fundamental está sucediendo antes de que llegue a los registros de reproducción. Alguien ha experimentado esto?

+0

supongo que el tema se debe a la forma en heroku gestiona el direccionamiento. Cree un ticket de soporte, son respuestas muy rápidas y estoy muy contento de lo bien que resuelven problemas. –

+0

Lo haré, publicaré aquí con cualquier resolución. –

Respuesta

6

No creo que Play admita la forma en que las solicitudes se reenvían (procesadas) en Heroku a través del parámetro de configuración XForwardedSupport. Eso tendría que establecerse en la dirección del equilibrador de carga Heroku y no hay forma de configurar ese preruntiempo. En su lugar, solo debe mirar el encabezado de solicitud x-forwarded-proto para determinar si la solicitud al equilibrador de carga Heorku fue a través de http o https. Tal vez algo así como:

Boolean secure = false; 
    if (request.headers.get("x-forwarded-proto") != null) { 
     secure = request.headers.get("x-forwarded-proto").values.contains("https"); 
    } 
    System.out.println("secure = " + secure); 

BTW: Heroku's cedar stack no utiliza Nginx. Utiliza MochiWeb, un servidor web basado en Erlang.

+0

Este definitivamente parece ser el problema, según lo confirmado por un ingeniero de soporte heroku. Me preocupa que si Play no sabe que la solicitud es segura, hará cosas como redireccionar a direcciones URL no ssl por defecto y cosas así. De todos modos, lo probaré y veré qué más sale mal e informaré. ¡Gracias! –

+1

Hasta ahora, ¡bien en esta solución! Para ciertos manejadores anotados, forzaré una redirección hacia SSL para que la acción nunca se pueda ver a través de un HTTP común. Si alguien está interesado, publicaré un código sobre cómo se hace, lo encontramos realmente útil (más ahora que esta solución funciona para heroku). –

+0

He agregado algunas ideas sobre cómo hacer que esto sea más útil en el código de reproducción en sentido ascendente. Me interesaría saber de más personas en este ticket: [Play bug # 1406] (https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not -fully-support-proxied-ssl # ticket-1406-4) –

3

thnx big time! ¡ahorraste horas luchando con heroku + play! puedo confirmar que si lo ajusta en application.conf

XForwardedSupport=all 

heroku deja de quejarse con SIGTERM