Ciclo di reindirizzamento utilizzando Flexible ssl di cloudflare


10

Sto cercando di implementare SSL flessibile fornito da CloudFlare sul mio sito.

Ecco la mia configurazione 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...)

Tuttavia, quando provo a connettermi al sito Web (Wordpress), ottengo un ciclo di reindirizzamento (chrome: ERR_TOO_MANY_REDIRECTS). Come configuro nginx per impedirlo?

Risposte:


30

Lo ssl flessibile di Cloudflare significa che la connessione tra cloudflare e il tuo server è sempre su http:

la connessione è sempre http

Dato questo - l'unico blocco server nella domanda di pertinenza è questo:

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

Dovrebbe essere ovvio il motivo per cui ciò comporta un ciclo di reindirizzamento, ci sono 2 soluzioni per forzare le connessioni https usando la loro soluzione ssl flessibile.

Usa le regole della pagina di Cloudflare

Se l' accesso al server avviene esclusivamente tramite cloudflare, è possibile utilizzare le regole della pagina di cloudflare per modificare le risposte per un dominio, sottodominio o qualsiasi modello di URL:

Utilizzo delle regole della pagina di cloudflare

Una delle opzioni è forzare https:

Usa sempre HTTPS

Test $http_x_forwarded_proto

Ci sono momenti in cui potresti voler evitare di usare le regole della pagina (dovrebbe essere raro o solo di transizione), per questi scenari è possibile testare il protocollo inoltrato e reindirizzare in base a quello:

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
}

E ci saranno errori nelle mie connessioni https come non tutto è trasmesso su http in questo caso?
Deqq,

Il modo in cui si configura cloudflare / nginx non ha alcuna attinenza con ciò, i contenuti html determineranno se vengono segnalati tali errori.
AD7,

La prima riga di questa risposta non è corretta: la connessione tra il browser e CloudFlare è crittografata TLS, la connessione da CloudFlare al server di origine è http. I loop di reindirizzamento possono essere causati da regole di pagina o da impostazioni di alto livello che specificano il tipo di crittografia in modo errato, ad es. Completo quando è realmente necessario.
Tim

C'è anche un plugin che aiuta in questo: en-nz.wordpress.org/plugins/cloudflare-f flexible
Tim

5

Questo può risolvere il problema se hai il certificato SSL valido sul tuo. Casella [Crypto] e seleziona Full (strict)come nell'immagine. inserisci qui la descrizione dell'immagine

Non è necessario aggiornare il file di configurazione del server Web per Nginx.


Completo (rigoroso) funziona solo se il server Web di origine ha un certificato SSL valido con una catena di certificati valida. Funziona completamente con qualsiasi certificato SSL, incluso autofirmato. Questa non è una buona risposta alla domanda.
Tim

Sì, vedo ora, la domanda menzionava il certificato flessibile. Migliorerò la mia risposta grazie al tuo feedback e sarò più specifico. Stiamo migliorando la base di conoscenza qui. Un certificato SSL valido ha il miglior valore per Google se consideriamo la prospettiva SEO. Non mi pento dopo aver pubblicato questo.
prosti

Flessibile / completo / rigoroso non fa differenza per SEO, questa impostazione è per la connessione al server di origine. Cloudflare presenta un certificato https condiviso a chiunque richieda la pagina, in che modo si collega all'origine è in gran parte irrilevante.
Tim

Supponendo che il server non ha un cert SSL valido (il PO non specifica, e sono venuto qui con un simile google config), questa è una grande opzione - nota può anche essere ambito a un particolare sottodominio tramite la pagina Regole.
skoczen,

Questa è un'ottima risposta per me che aveva un SSL valido.
Filippo,

0

La risposta di AD7six è molto buona, anche se sembra che ci sia una soluzione più semplice che non richiede regole di pagina. Non sono sicuro se questa è una nuova aggiunta rispetto alle risposte precedenti, ma dovrebbe sicuramente essere documentata su questa domanda, soprattutto dato che al momento della scrittura ottieni solo 3 regole di pagina gratuite con Cloudflare.

Quando hai attivato SSL flessibile per un determinato dominio, puoi scorrere verso il basso sulla Cryptoscheda e abilitare l' Always use HTTPSopzione. Questa opzione risolverà senza problemi il problema del ciclo di reindirizzamento (spiegato a fondo nella risposta di AD7six ).

L'opzione "Usa sempre HTTPS" di Cloudflare

Questa opzione è confermata lavorando con nginx; inoltre, non dovrebbe esserci alcuna configurazione del server in cui questa opzione non funziona, a condizione che SSL flessibile sia già abilitato e funzioni senza problemi.


Se l'interfaccia utente di Cloudflare è cambiata (o sono state rese disponibili nuove opzioni), sarebbe meglio modificare la risposta esistente anziché crearne una concorrente.
AD7,

@ AD7six Credo che questa sia un'aggiunta alla vecchia interfaccia utente, non una sostituzione, il che significa che la vecchia risposta dovrebbe essere ancora valida. Pertanto una risposta separata sarebbe più logica della modifica dell'originale, non sarebbe?
Chad,

Non penso "Prima dovevi farlo, ma adesso c'è un pulsante!" è una nuova risposta, no :).
AD7,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.