# Regelübersicht

Regeln sind leistungsstarke Werkzeuge, mit denen du anpassen kannst, wie smoxy den Traffic zu deiner Website verarbeitet. Sie ermöglichen es dir, das Verhalten von smoxy für bestimmte URLs, Bedingungen oder Sicherheitsszenarien zu ändern, ohne die Basiskonfiguration deiner Website anzupassen.

### Was sind Regeln?

Stell dir Regeln als "Wenn-Dann"-Anweisungen für dein CDN vor:

* **WENN** eine Anfrage bestimmte Kriterien erfüllt (ein URL-Muster, eine IP-Adresse, ein geografischer Standort usw.)
* **DANN** ändere das Verhalten von smoxy (Caching anpassen, zu anderen Servern weiterleiten, Zugriff blockieren usw.)

Regeln geben dir detaillierte Kontrolle darüber, wie smoxy jede Anfrage verarbeitet, und ermöglichen es dir, ausgefeilte Routing-, Caching- und Sicherheitsrichtlinien zu erstellen.

## Die 4 Regeltypen

smoxy bietet drei Regeltypen, die jeweils für bestimmte Anwendungsfälle konzipiert sind:

| Regeltyp              | Ideal für                          | Abgleich basierend auf                           | Ausführungsverhalten                             |
| --------------------- | ---------------------------------- | ------------------------------------------------ | ------------------------------------------------ |
| **Access Rules**      | Sicherheit & Zugriffskontrolle     | Umfangreiche Bedingungen (IP, Land, Header usw.) | Läuft **zuerst**, vor allem anderen              |
| **Rewrite Rules**     | URL-Umschreibung & Weiterleitungen | URL-Muster                                       | Läuft **als zweites**, nginx-artige Umschreibung |
| **Conditional Rules** | Komplexe Logik & Bedingungen       | Umfangreiche Bedingungen (IP, Land, Header usw.) | **Alle passenden Regeln werden angewendet**      |

#### **Schnellvergleich**

**Access Rules** vs **Conditional Rules**:

* Beide nutzen umfangreichen Bedingungsabgleich (IP, Land, Header, Cookies usw.)
* Access Rules sind für **Sicherheit** (blockieren, herausfordern, whitelisten) und laufen **zuerst**
* Conditional Rules sind für **Konfigurationsänderungen** (Caching, Routing, Header) und laufen **später**

**Rewrite Rules**:

* Spezialisiert auf URL-Umschreibung (wie nginx Rewrite-Regeln)
* Begrenzt auf 5 Regeln pro Website
* Läuft **als zweites** in der Reihenfolge (nach Access Rules, vor Conditional Rules)

### Ausführungsreihenfolge

Regeln werden bei jeder Anfrage in einer bestimmten Reihenfolge ausgewertet:

```
Eingehende Anfrage
    ↓
1. Access Rules (Sicherheitsebene)
   - Position 1, 2, 3... (der Reihe nach)
   - Traffic blockieren, herausfordern oder whitelisten
   - Alle passenden Regeln werden angewendet (außer "Stop" ist aktiviert)
    ↓
2. Rewrite Rules (URL-Umschreibung)
   - Position 1, 2, 3... (der Reihe nach)
   - Schreibt URL um, wenn Treffer
    ↓
3. Conditional Rules (Bedingungsabgleich)
   - Position 1, 2, 3... (der Reihe nach)
   - Alle passenden Regeln werden angewendet (außer "Stop" ist aktiviert)
    ↓
Antwort
```

#### **Innerhalb jedes Regeltyps**

Regeln desselben Typs werden basierend auf ihrer **Position** (auch Priorität oder Reihenfolge genannt) ausgewertet:

* Position 1 wird zuerst ausgewertet
* Position 2 wird als zweites ausgewertet
* Und so weiter...

Du kannst Regeln jederzeit per Drag-and-Drop im smoxy Hub neu anordnen.

### Wann welchen Regeltyp verwenden

#### **Verwende Access Rules wenn:**

* ✅ Du **verdächtigen Traffic blockieren oder herausfordern** musst
* ✅ Du **vertrauenswürdige IPs whitelisten** möchtest (Sicherheitsprüfungen überspringen)
* ✅ Du die **WAF umgehen** musst für bestimmte Anfragen (z.B. interne Tools)
* ✅ Sicherheitsentscheidungen **vor jeder anderen Verarbeitung** getroffen werden müssen

**Beispiel**: Alle Anfragen aus einem bestimmten Land blockieren, außer von deiner Büro-IP.

#### **Verwende Rewrite Rules wenn:**

* ✅ Du **URLs umschreiben** musst (wie nginx Rewrite-Regeln)
* ✅ Du **URL-Normalisierung oder Weiterleitungen** durchführst
* ✅ Du **Legacy-URL-Unterstützung** oder **saubere URL-Strukturen** benötigst
* ✅ URL-Transformationen **vor** der Auswertung anderer Regeln stattfinden müssen

**Beispiel**: `/alter-pfad` zu `/neuer-pfad` umschreiben, oder URLs für besseres Caching normalisieren.

#### **Verwende Conditional Rules wenn:**

* ✅ Du **unterschiedliche Einstellungen für verschiedene URLs** benötigst
* ✅ Du **komplexe Bedingungen** benötigst (IPs, Länder, Header, Cookies usw.)
* ✅ Du möchtest, dass **mehrere Regeln angewendet werden** auf dieselbe Anfrage
* ✅ Du **erweiterte Logik** benötigst (UND/ODER-Kombinationen)
* ✅ Verschiedene Bedingungen unterschiedliche Konfigurationen erfordern

**Beispiel**: Höhere Bildqualität für Nutzer aus Europa bereitstellen, Basic Auth für Nicht-Büro-IPs aktivieren und mobilen Traffic anders routen.

**Beispiel**: Caching für `/admin/*` URLs deaktivieren, oder `/api/*` zu einem anderen Load Balancer routen.

### Einstellungen: Jede smoxy-Konfiguration überschreiben

**Conditional Rules können JEDE Einstellung aus der Konfiguration deiner Website überschreiben.**

Das bedeutet, jede Konfiguration, die du für deine Website festlegen kannst (Caching, Bildoptimierung, Load Balancing, Sicherheit, Header usw.), kann durch eine Regel für bestimmte Anfragen überschrieben werden.

**Verfügbare Einstellungen umfassen:**

* **Routing**: Verschiedene Origins oder Load Balancer auswählen
* **Caching**: Cache-TTL, Cache-Keys, Cache-Tags steuern
* **Bildoptimierung**: AVIF, WebP, JPEG, PNG Qualitätsstufen
* **Sicherheit**: WAF, Basic Auth, benutzerdefinierte Fehlerseiten aktivieren/deaktivieren
* **Header**: Request/Response-Header hinzufügen, ändern oder entfernen
* **Optimierung**: HTML/JS/CSS-Minifizierung
* **Erweitert**: Wartungsmodus, Debug-Header, Proxy-Timeouts, SSI/ESI

### Best Practices

1. **Beginne mit Access Rules für Sicherheit**: Definiere immer zuerst deine Whitelist-Regeln (überspringen/fortfahren), dann füge Block/Challenge-Regeln hinzu
2. **Verwende Rewrite Rules früh**: URL-Umschreibungen erfolgen bevor Conditional Rules ausgewertet werden, plane entsprechend
3. **Verwende Conditional Rules für komplexe Logik**: Wenn du mehrere Bedingungen benötigst oder mehrere Regeln angewendet werden sollen
4. **Teste mit Debug-Headern**: Aktiviere Debug-Header um zu sehen, welche Regeln auf deine Anfragen angewendet werden
5. **Reihenfolge ist wichtig**: Überprüfe die Position/Reihenfolge deiner Regeln – besonders wichtig bei Access und Conditional Rules
