# Cloudflare Setup

Wenn du Cloudflare vor smoxy verwendest, musst du zwei Dinge konfigurieren, um Konflikte zu vermeiden: Bild-Caching und Cache-Invalidierung.

***

### Bildoptimierung

Wenn smoxy Bilder nach WebP oder AVIF konvertiert, ändert es den `Content-Type`-Header, behält aber die ursprüngliche Dateiendung bei. Cloudflare cached basierend auf der Dateiendung, nicht dem Content-Type — ein AVIF-Bild kann also unter einer `.jpg`-Endung gecacht werden, wodurch Browser das falsche Format erhalten.

**Lösung:** Erstelle eine Cloudflare Cache Rule, die den Cache für Bilddateien umgeht.

**Cache Rule Expression:**

```
(ends_with(http.request.uri.path, ".png")) or
(ends_with(http.request.uri.path, ".jpeg")) or
(ends_with(http.request.uri.path, ".jpg")) or
(ends_with(http.request.uri.path, ".gif")) or
(ends_with(http.request.uri.path, ".webp")) or
(ends_with(http.request.uri.path, ".avif"))
```

Setze die Aktion auf **Bypass Cache** für passende Anfragen.

Wenn du einen Cloudflare Pro- oder Business-Plan hast, deaktiviere zusätzlich **Cloudflare Polish** (Bildoptimierung), um doppelte Optimierung zu vermeiden.

***

### Cache-Invalidierung

smoxy verwendet die HTTP-Methoden `BAN` und `PURGE` zur Invalidierung gecachter Inhalte. Cloudflare kann diese Requests auf zwei Arten stören:

* **BAN-Requests** — Cloudflares DDoS-Schutz kann sie blockieren, wenn viele in kurzer Zeit gesendet werden
* **PURGE-Requests** — Cloudflare blockiert diese vollständig, und keine WAF-Regel kann das überschreiben

**Lösung:** Erstelle eine Subdomain mit deaktiviertem Cloudflare-Proxy (DNS-only-Modus) und sende deine Invalidierungsanfragen darüber.

#### Einrichtung

1. Füge in Cloudflare DNS einen neuen Eintrag für eine Subdomain hinzu (z. B. `smoxy.example.com`)
2. Setze den Proxy-Toggle auf **DNS only** (graues Wolken-Symbol) — das bedeutet, Cloudflare proxied keine Anfragen an diese Subdomain
3. Richte den Eintrag auf smoxy

#### Muss die Subdomain in smoxy konfiguriert werden?

Nein. Wenn deine Hauptdomain (z. B. `example.com`) bereits in smoxy eingerichtet und einer Site zugewiesen ist, werden alle Subdomains automatisch über dieselbe Site geroutet. Die Invalidierungs-Subdomain nutzt deine bestehende Site-Konfiguration.

#### Verwendung

Sende deine Invalidierungsanfragen an die Subdomain statt an die Hauptdomain:

```bash
curl -X BAN -H "secret: <token>" -H "tags: products" https://smoxy.example.com/
```

Das umgeht Cloudflare vollständig, sodass BAN- und PURGE-Requests smoxy erreichen, ohne blockiert zu werden.
