web-dev-qa-db-fra.com

HTTP vers HTTPS Nginx trop de redirections

J'ai un site Web fonctionnant sur une pile LEMP. J'ai activé cloudflare avec le site Web. J'utilise le certificat SSL flexible cloudflare pour https. Lorsque j'ouvre le site Web en chrome il montre que le site Web vous a redirigé trop de fois et dans Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui ne se terminera jamais. J'ai essayé pour voir les réponses à d'autres questions mais aucune d'entre elles ne semble résoudre le problème Fichier de conf NGINX: -

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name mydomain.com www.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/html;

index index.php index.html index.htm index.nginx-debian.html;

location / {
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
    deny all;
}
}

Je serais très reconnaissant si quelqu'un pouvait signaler ce que je fais mal.

11

Puisque vous utilisez SSL flexible cloudflare, votre fichier de configuration nginx ressemblera à ceci: -

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name mydomain.com www.mydomain.com;

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

  root /var/www/html;

  index index.php index.html index.htm index.nginx-debian.html;

  location / {
     try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }

  location ~ /\.ht {
     deny all;
  }
}
35
Kushal

Le raisonnement de Kushal est correct. Puisque vous utilisez SSL "flexible" entre Cloudflare et votre Origin, vous entrez dans cette boucle de redirection.

Ce n'est pas idéal car le trafic entre Cloudflare et votre Origin n'est pas sécurisé. La meilleure option consiste à chiffrer le trafic.

Accédez au tableau de bord de Cloudflare, sélectionnez Crypto, puis choisissez une option SSL différente qui répond à vos besoins. J'utilise Complet (strict) puisque j'ai les certificats installés via Let's encrypt.

Je suggérerais également d'utiliser https://nginxconfig.io/ pour générer votre configuration.

De l'aide de Cloudflare:

Pourquoi mon site ne fonctionne-t-il pas sur HTTPS? Si vous vous êtes récemment inscrit à Cloudflare et que l'état de votre certificat ci-dessus indique "Autorisation du certificat", HTTPS n'est pas encore disponible pour votre site car Cloudflare n'a pas de certificat pour celui-ci. Le provisionnement prend généralement environ 15 minutes pour les plans payants et jusqu'à 24 heures pour Free. Contactez le support si vous n'avez pas de certificat après cette heure. Si l'état ci-dessus indique "Certificat actif", plusieurs autres problèmes courants peuvent apparaître lors de l'accès à votre site via HTTPS.

Quel paramètre SSL dois-je utiliser? Ce paramètre contrôle la façon dont les serveurs Cloudflare se connectent à vos demandes Origin pour HTTPS. Nous vous recommandons d'activer le paramètre SSL complet (strict) si possible. Les cas d'utilisation courants pour chacun sont:

Désactivé: aucun visiteur ne pourra voir votre site via HTTPS; ils seront redirigés vers HTTP.

SSL flexible: vous ne pouvez pas configurer la prise en charge HTTPS sur votre origine, même avec un certificat qui n'est pas valide pour votre site. Les visiteurs pourront accéder à votre site via HTTPS, mais les connexions à votre origine seront établies via HTTP. Remarque: vous pouvez rencontrer une boucle de redirection avec certaines configurations Origin.

SSL complet: votre origine prend en charge HTTPS, mais le certificat installé ne correspond pas à votre domaine ou est auto-signé. Cloudflare se connectera à votre Origin via HTTPS, mais ne validera pas le certificat.

Complet (strict): votre origine a un certificat valide (non expiré et signé par une autorité de certification de confiance ou une autorité de certification d'origine Cloudflare) installé. Cloudflare se connectera via HTTPS et vérifiera le certificat à chaque demande.

3
incognick