Boucle de redirection à l'aide de SSL flexible Cloudflare


10

J'essaie d'implémenter SSL flexible fourni par CloudFlare sur mon site.

Voici ma configuration nginx:

# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
    server 127.0.0.1:9000;
}

server {
    listen         80;
    server_name    example.com www.example.com;
    return         301 https://$server_name$request_uri;
}

server {
    ## Listen ports
    listen 443;

    # use _ if you want to accept everything, or replace _ with domain
    server_name example.com www.example.com;

    location / {
      #proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_set_header X_FORWARDED_PROTO https;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  Host $http_host;
      proxy_set_header  X-Url-Scheme $scheme;
      proxy_redirect    off;
      proxy_max_temp_file_size 0;
    }

(...rest of config...)

Cependant, lorsque j'essaie de me connecter au site Web (Wordpress), j'obtiens une boucle de redirection (chrome: ERR_TOO_MANY_REDIRECTS). Comment configurer nginx pour éviter cela?

Réponses:


30

Le SSL flexible de Cloudflare signifie que la connexion entre cloudflare et votre serveur est toujours via http:

la connexion est toujours http

Compte tenu de cela - le seul bloc serveur dans la question de la pertinence est celui-ci:

server {
   listen         80;
   server_name    example.com www.example.com;
   return         301 https://$server_name$request_uri;
}

Il devrait être évident pourquoi cela se traduit par une boucle de redirection, il existe 2 solutions pour forcer les connexions https à l'aide de leur solution SSL flexible.

Utilisez les règles de page de Cloudflare

Si l' accès au serveur se fait exclusivement via cloudflare, vous pouvez utiliser les propres règles de page de cloudflare pour modifier les réponses d'un domaine, d'un sous-domaine ou de n'importe quel modèle d'URL:

Utilisation des règles de page de cloudflare

L'une des options consiste à forcer https:

Utilisez toujours HTTPS

Tester $http_x_forwarded_proto

Il peut arriver que vous souhaitiez éviter d'utiliser des règles de page (qui devraient être rares ou transitoires uniquement), pour ces scénarios, il est possible de tester le protocole transféré et de rediriger en fonction de cela:

server {
   listen         80;
   server_name    example.com www.example.com;

   if ($http_x_forwarded_proto = "http") {
     return 301 https://$server_name$request_uri;
   }

   ... directives to generate a response
}

Et y aura-t-il des erreurs dans mes connexions https telles que tout n'est pas transmis via http dans ce cas?
Deqq

Comment vous configurez cloudflare / nginx n'a aucune incidence sur cela, le contenu html déterminera si de telles erreurs sont signalées.
AD7six

La première ligne de cette réponse est incorrecte: la connexion entre le navigateur et CloudFlare est cryptée TLS, la connexion de CloudFlare au serveur d'origine est http. Les boucles de redirection peuvent être provoquées par des règles de page ou un paramètre de haut niveau spécifiant le type de cryptage de manière incorrecte - par exemple complet lorsque vous avez vraiment besoin de flexibilité.
Tim

Il y a aussi un plugin qui aide à cela: en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim

5

Cela peut résoudre le problème si vous avez le certificat SSL valide sur votre. [Crypto] et sélectionnez Full (strict)comme dans l'image. entrez la description de l'image ici

Pas vraiment besoin de mettre à jour le fichier de configuration du serveur Web pour Nginx.


Full (strict) ne fonctionne que si le serveur Web d'origine possède un certificat SSL valide avec une chaîne de certificats valide. Fonctionne pleinement avec n'importe quel certificat SSL, y compris auto-signé. Ce n'est pas une bonne réponse à la question.
Tim

Oui, je vois maintenant, la question mentionnait le certificat flexible. J'améliorerai ma réponse grâce à vos retours et je serai plus précis. Nous améliorons la base de connaissances ici. Un certificat SSL valide a la meilleure valeur pour Google si nous considérons la perspective SEO. Je ne regrette pas après avoir posté cela.
prosti

Flexible / complet / strict ne fait aucune différence pour le référencement, ce paramètre est pour la connexion au serveur d'origine. Cloudflare présente un certificat https partagé à quiconque demande la page, la façon dont il se connecte à l'origine est largement hors de propos.
Tim

En supposant que le serveur possède un certificat SSL valide (l'OP ne le spécifie pas, et je suis venu ici via un config google similaire), c'est une excellente option - notez qu'il peut également être étendu à un sous-domaine particulier via les règles de page.
skoczen

C'est une super bonne réponse pour moi qui avait un SSL valide.
Philip

0

La réponse d'AD7six est très bonne, bien qu'il semble qu'il existe une solution plus simple qui ne nécessite pas de règles de page. Je ne sais pas s'il s'agit d'un nouvel ajout depuis les réponses précédentes, mais il devrait certainement être documenté sur cette question, d'autant plus que vous n'obtenez que 3 règles de page gratuite avec Cloudflare au moment de la rédaction.

Lorsque le SSL flexible est activé pour un domaine donné, vous pouvez faire défiler vers le bas sur l' Cryptoonglet et activer l' Always use HTTPSoption. Cette option résoudra de manière transparente le problème de la boucle de redirection (expliqué en détail dans la réponse d'AD7six ).

L'option «Toujours utiliser HTTPS» de Cloudflare

Cette option est confirmée en travaillant avec nginx; en outre, il ne devrait pas y avoir de configuration de serveur où cette option ne fonctionne pas, à condition que le SSL flexible soit déjà activé et fonctionne sans problème.


Si l'interface utilisateur de Cloudflare a changé (ou de nouvelles options ont été rendues disponibles), il serait préférable de modifier la réponse existante plutôt que de créer une réponse concurrente.
AD7six

@ AD7six Je pense que c'est un ajout à l'ancienne interface utilisateur, pas un remplacement, ce qui signifie que l'ancienne réponse doit toujours être valide. Par conséquent, une réponse séparée serait plus logique que l'édition de l'original, n'est-ce pas?
Chad

Je ne pense pas "Avant, vous deviez le faire sur le long terme, mais maintenant il y a un bouton pour ça!" est une nouvelle réponse, non :).
AD7six
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.