2011-12-14 6 views
6

Je déploie une application sur Heroku et essaie de déterminer si la requête est sécurisée (request.secure). Cela retourne initialement false sur heroku car nginx gère le travail SSL et communique via http simple au serveur de l'application. Donc, pour laisser le jeu lire les en-têtes qui permettent est de savoir c'est une demande sécurisée ajouter:XForwardedSupport pour la lecture https! support sur Heroku échouant

XForwardedSupport = 127.0.0.1

Pour application.conf comme recommandé dans les forums de jeu. Cependant, toutes les demandes (à l'exception des images) échouent sans erreur. Il semble que quelque chose de fondamental se passe avant qu'il ne frappe les journaux de jeu. Quelqu'un at-il vécu cela?

+0

Je suppose que la question est parce que la façon dont heroku gère le routage. Créer un ticket de support, ils répondent vraiment rapidement et je suis vraiment heureux de la façon dont ils résolvent les problèmes. –

+0

Fera, je posterai ici avec n'importe quelle résolution. –

Répondre

6

Je ne pense pas que Play supporte la façon dont les requêtes sont transmises (proxy) sur Heroku via le paramètre de configuration XForwardedSupport. Cela doit être défini sur l'adresse de l'équilibreur de charge Heroku et il n'existe aucun moyen de configurer ce pré-runtime. Au lieu de cela, vous devriez simplement regarder l'en-tête de demande x-forwarded-proto pour déterminer si la demande à l'équilibreur de charge Heorku était via http ou https. Peut-être quelque chose comme:

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: La pile de cèdre de Heroku n'utilise pas Nginx. Il utilise MochiWeb, un serveur Web basé sur Erlang.

+0

Cela semble définitivement être le problème, comme l'a confirmé un ingénieur de support heroku. Je suis inquiet que si le jeu ne sait pas que la demande est sécurisée, il fera des choses comme effectuer des redirections vers des URL non-ssl par défaut et des choses comme ça. Quoi qu'il en soit, je vais essayer et voir ce qui ne va pas et faire un rapport. Merci! –

+1

Jusqu'ici tout va bien sur cette solution! Pour certains gestionnaires annotés, je suis en train de forcer une redirection sur SSL afin que l'action ne puisse jamais être visualisée sur un http standard. Si quelqu'un est intéressé, je posterai du code sur la façon dont c'est fait, nous le trouvons vraiment utile (d'autant plus que ce correctif fonctionne pour heroku). –

+0

J'ai ajouté quelques réflexions pour rendre ceci plus utile dans le code de jeu en amont. Je serais intéressé d'entendre plus de gens dans ce billet: [Lire le 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 gros temps! vous avez sauvé des heures de lutte avec heroku + jeu! Je peux confirmer que lorsque vous définissez cela dans application.conf

XForwardedSupport=all 

heroku cesse de se plaindre avec SIGTERM

Questions connexes