2010-08-13 3 views
1

Je reçois une boucle de redirection infinie après avoir ajouté le support SSL à mon site. J'utilise le plugin "SslRequirement". Les symptômes que je vois sont, toute action qui a "ssl_required" activé, et toute URL que je tape manuellement qui a https à l'avant, va dans une boucle infinie, avec ce qui suit dans le fichier development.log , encore et jusqu'à ce que le navigateur attrape la boucle de redirection et arrête le chargement de la page («/admins/index » est l'action dans cet exemple, mais il arrive avec toute action):nginx + SslRequirement + mongrel cluster = boucle de redirection infinie

Processing AdminsController#index (for 127.0.0.1 at 2010-08-13 13:50:16) [GET] 
    Parameters: {"action"=>"index", "controller"=>"admins"} 
Redirected to https://localhost/admins 
Filter chain halted as [:ensure_proper_protocol] rendered_or_redirected. 
Completed in 0ms (DB: 0) | 302 Found [http://localhost/admins] 

au début, je Je pensais qu'il y avait une sorte de problème où je devais faire toutes mes actions "ssl_allowed" - alors j'ai essayé, mais en vain. SI je supprime l'utilisation de SslRequirement et supprime toutes les références "ssl_required/ssl_allowed", alors https fonctionne bien - c'est donc la redirection dans les actions de http à https qui semble être le problème.

Des indices?

Répondre

2

Réponse trouvée ici:

http://www.hostingrails.com/SSL-Redirecting-not-working

version courte est, j'ai ajouté la ligne suivante au vhost SSL dans ma config nginx:

proxy_set_header X_FORWARDED_PROTO https;


Version détaillée est:

Fondamentalement, le problème est descendu sur le serveur nginx ne passant pas le fait que la demande de la source était un protocole HTTPS sur le cluster Mongrel. Cela a provoqué l'appel à "request.ssl?" à l'intérieur du plugin SslRequirement à TOUJOURS retourner faux. Donc, quand ceci est retourné comme faux, le "Ensure_proper_protocol" relancerait l'action sur https, ce qui vérifierait "request.ssl?", Qui retournerait "false", qui re-publierait l'action sur https, qui vérifierait "request.ssl?", qui retournerait "false", qui relancerait l'action sur https, qui vérifierait "request.ssl?", qui retournerait "false", ce qui lancez l'action sur https, qui vérifierait "request.ssl?", qui renverrait "false", qui re-publierait l'action sur https ...

... vous avez l'idée. Le cluster mongrel n'a jamais pensé que la requête était sur le protocole HTTPS, donc il a été redirigé pour toujours. Un petit changement dans la configuration de nginx pour corriger cela, et BAM-O: problème résolu.

Questions connexes