Redirigir el bucle usando el ssl flexible de cloudflare

10

Estoy tratando de implementar SSL flexible proporcionado por CloudFlare en mi sitio.

Aquí está mi configuración 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...)

Sin embargo, cuando intento conectarme al sitio web (Wordpress), obtengo un bucle de redireccionamiento (Chrome: ERR_TOO_MANY_REDIRECTS). ¿Cómo configuro nginx para evitar esto?

Deqq
fuente

Respuestas:

30

El ssl flexible de Cloudflare significa que la conexión entre cloudflare y su servidor siempre se realiza a través de http:

la conexión es siempre http

Dado esto, el único bloque de servidor en la cuestión de relevancia es este:

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

Debería ser obvio por qué eso da como resultado un bucle de redireccionamiento, hay 2 soluciones para forzar las conexiones https utilizando su solución SSL flexible.

Use las reglas de la página de Cloudflare

Si el acceso al servidor se realiza exclusivamente a través de cloudflare, puede usar las propias reglas de página de cloudflare para modificar las respuestas para un dominio, subdominio o cualquier patrón de URL:

Usar las reglas de la página de cloudflare

Una de las opciones es forzar https:

Siempre use HTTPS

Prueba $http_x_forwarded_proto

Hay momentos en los que es posible que desee evitar el uso de reglas de página (debe ser raro o solo de transición), para estos escenarios es posible probar el protocolo reenviado y redirigir en función de eso:

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
}
AD7six
fuente
¿Y habrá errores en mis conexiones https como que no todo se transmite a través de http en este caso?
Deqq
La forma en que configura cloudflare / nginx no tiene relación con eso, el contenido html determinará si se informan tales errores.
AD7six
La primera línea de esta respuesta es incorrecta: la conexión entre el navegador y CloudFlare está cifrada con TLS, la conexión de CloudFlare al servidor de origen es http. Los bucles de redireccionamiento pueden ser causados ​​por reglas de página o configuraciones de alto nivel que especifican el tipo de cifrado incorrectamente, por ejemplo, cuando se necesita realmente flexible.
Tim
También hay un complemento que ayuda con esto: en-nz.wordpress.org/plugins/cloudflare-flexible-ssl
Tim
5

Esto puede solucionar el problema si tiene el certificado SSL válido en su. [Cripto] cuadro y seleccione Full (strict)como en la imagen. ingrese la descripción de la imagen aquí

Realmente no es necesario actualizar el archivo de configuración del servidor web para Nginx.

prosti
fuente
Completo (estricto) solo funciona si el servidor web de origen tiene un certificado SSL válido con una cadena de certificados válida. Full funciona con cualquier certificado SSL, incluido el autofirmado. Esta no es una buena respuesta a la pregunta.
Tim
Sí, ya veo, la pregunta mencionaba el certificado flexible. Mejoraré mi respuesta gracias a sus comentarios y seré más específico. Estamos mejorando la base de conocimiento aquí. Un certificado SSL válido tiene el mejor valor para Google si consideramos la perspectiva SEO. No me arrepiento después de publicar esto.
prosti
Flexible / completo / estricto no hace ninguna diferencia para SEO, esa configuración es para la conexión al servidor de origen. Cloudflare presenta un certificado https compartido a quien solicita la página, la forma en que se conecta al origen es en gran medida irrelevante.
Tim
Suponiendo que el servidor no tiene un certificado SSL válido (el PO no especifica, y yo he venido aquí a través de un google configuración similar), esta es una gran opción - nota también puede estar al alcance de un subdominio en particular a través de las reglas de página.
skoczen
Esta es una respuesta súper buena para mí que tenía un SSL válido.
Philip
0

La respuesta de AD7six es muy buena, aunque parece que hay una solución más simple que no requiere reglas de página. No estoy seguro de si esta es una nueva adición desde las respuestas anteriores, pero definitivamente debe documentarse sobre esta pregunta, especialmente dado que solo obtienes 3 reglas de página gratuitas con Cloudflare al momento de escribir.

Cuando tiene activado SSL flexible para un dominio determinado, puede desplazarse hacia abajo en la Cryptopestaña y habilitar la Always use HTTPSopción. Esta opción resolverá sin problemas el problema del bucle de redireccionamiento (explicado a fondo en la respuesta de AD7six ).

Opción "Usar siempre HTTPS" de Cloudflare

Esta opción se confirma trabajando con nginx; además, no debería haber ninguna configuración de servidor donde esta opción no funcione, siempre que el SSL flexible ya esté habilitado y funcione sin problemas.

Chad
fuente
Si la interfaz de usuario de Cloudflare ha cambiado (o se han puesto a disposición nuevas opciones), sería mejor editar la respuesta existente en lugar de crear una respuesta competitiva.
AD7six
@ AD7six Creo que esta es una adición a la interfaz de usuario anterior, no un reemplazo, lo que significa que la respuesta anterior aún debería ser válida. Por lo tanto, una respuesta separada sería más lógica que editar el original, ¿no es así?
Chad
No creo "solías tener que hacer esto a la larga, ¡pero ahora hay un botón para ello!" Es una nueva respuesta, no :).
AD7six