J'utilise un équilibreur de charge Rackspace qui me permet de configurer ma clé ssl / pem à l'intérieur du panneau d'administration. Tout fonctionne bien, je peux utiliser les protocoles http et https. Mais si j'essaye de rediriger http vers https en utilisant:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... je reçois une boucle de redirection. Je me rends compte que je n'écoute pas le port 443 mais c'est parce que l'équilibreur de charge a géré cela pour moi. J'ai également essayé d'envelopper la réécriture en if ($scheme ~* http){
vain.
L'autre partie de ma question est que je voudrais supprimer www de l'url, puis-je le faire avec une seule réécriture? La réécriture ci-dessus ne devrait-elle pas également s'en occuper?
Merci de votre aide!
nginx
load-balancing
jwerre
la source
la source
Réponses:
sciurus a raison dans la mesure où les équilibreurs de charge cloud de Rackspace définissent le X-Forwarded-Proto sur https lorsque SSL est déchargé sur l'équilibreur de charge. Afin d'éviter une boucle de redirection dans nginx, vous devriez pouvoir ajouter ce qui suit à la
location
section dans la configuration de vhost:Cela devrait éviter la boucle de redirection infinie lors de la redirection des requêtes non https vers https.
la source
En utilisant les variables serveur intégrées de nginx
$request_uri
et$server_name
vous pouvez le faire sans utiliser d'expressions régulières. Ajoutez ce qui suit aulocation
bloc de votre serveur et vous avez terminé:Cela suppose que votre équilibreur de charge envoie l'en-
$http_x_forwarded_proto
tête avec la demande à vos instances backend. D'autres en-têtes communs incluent$http_x_forwarded_scheme
et aussi juste$scheme
.Plus d'informations peuvent être trouvées dans la documentation nginx Pitfalls and Common Mistakes : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
la source
$host
place de$server_name
L'équilibreur de charge vous parle toujours via http. Ce qui se passe est
Les étapes 2 à 4 se répètent jusqu'à ce que le navigateur détecte la boucle de redirection et abandonne.
EDIT: pour résoudre ce problème, effectuez la réécriture uniquement lorsque l'en-tête X-Forwarded-Proto est défini sur http. Cet en-tête est la façon dont l'équilibreur de charge de Rackspace indique à votre serveur Web le protocole via lequel il a reçu la demande.
la source