Ein CDN oder Proxy beendet die Verbindung und baut eine eigene zu Ihnen auf. Ihr Server sieht deshalb bei jeder Anfrage die Adresse des Proxys — und das zerlegt still alles, was darauf beruht zu wissen, wer fragt.

Was kaputtgeht

  • Ratenbegrenzung — alle Besucher sind eine Adresse, also wird entweder jeder begrenzt oder niemand.
  • Sperren — fail2ban sperrt den Proxy, und damit alle.
  • Logs und Statistik — eine Adresse für die ganze Welt.
  • Länderregeln — das Land des Edge-Knotens, nicht das des Besuchers.

Sagen Sie dem Server, wo die echte Adresse steht

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... the rest of the provider's ranges
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
Vertrauen Sie diesem Header nur aus den Bereichen des Proxys selbst. Ihm von überall zu vertrauen heißt, dass jeder ihn schicken und sich für jede beliebige Adresse ausgeben kann — und Ihre Sperrliste wird zur Waffe gegen die eigenen Besucher.

Und wo https ist

Beendet der Proxy TLS, sieht Ihr Server einfaches http und entscheidet womöglich, den Besucher auf https umzuleiten — wo er längst ist. Das ist eine Weiterleitungsschleife.

# PHP, before the framework loads
if ((@$_SERVER["HTTP_X_FORWARDED_PROTO"] ?? "") === "https") {
    $_SERVER["HTTPS"] = "on";
}

Prüfen, ob es geklappt hat

tail -5 /var/log/nginx/access.log

Echte, verschiedene Adressen heißt: richtig. Dieselbe Adresse in jeder Zeile heißt: nicht.

Schließen Sie Port 80 und 443 für alles außer die Proxy-Bereiche, sobald es läuft. Sonst kann jeder, der Ihre Origin-Adresse herausfindet, den Proxy vollständig umgehen.