ERR_TOO_MANY_REDIRECTS met Cloudflare

Ik gebruik Cloudflare niet alleen als DNS-provider (handig! uitgebruid! integratie met Let’s Encrypt!), maar ook als proxy voor websites om zo de load een beetje van mijn servers te halen.

Maar bij sommige domeinen krijg ik ERR_TOO_MANY_REDIRECTS als ik de website probeer te bezoeken. En dat wil je natuurlijk niet.

Om het probleem (en vooral de oplossing) te snappen is het volstrekt niet nodig om een architectuurdiagram te tekenen, maar iedereen pronkt nu eenmaal graag met zijn equipment; sommigen met hun supercar, ik met mijn serverpark.

Narmer is de reverse proxy die de redirect van http naar https uitvoert

Er zit een reverse proxy tussen het wereldwijde web en de applicatieserver zelf (waar de Wordpress op draait) die ervoor zorgt dat ik die servers niet aan het internet moet hangen. Daar draait nginx op (want die is snel) en die beveiligt alle websites met SSL (A+). Al het HTTP-verkeer wordt doorgestuurd (301) naar HTTPS.

Het probleem is eigenlijk simpel (als je het weet). Al het verkeer wordt van HTTP naar HTTPS gestuurd (dat is goed), maar Cloudflare zal standaard HTTP (en niet HTTPS) gebruiken om met je website te verbinden. Maar jouw server stuurt aan Cloudflare (en aan de bezoeker): gebruik HTTPS. En dan geraakt je arme browser in de knoop, want hoe kan je nu een Redirect krijgen van HTTPS naar HTTPS?

Bezoeker vraagt https, maar Cloudflare gebruikt http en bezoeker krijgt de vraag om naar https te gaan

De oplossing is niet ingewikkeld: in de ssl-instellingen moet je de verbinding tussen Cloudflare en jouw webserver installen op full of full (strict). Dan gebruikt Cloudflare SSL om te verbinden en krijg je dus niet meer de vervelende redirects.

Pas het hier aan naar full

En nu zitten al mijn websites op Cloudflare, en heb ik meteen IPv6 (want dat werkte nog niet). Hoera!