Request Shield: unter Velocity
Exponential Velocity hält PHP-Worker zwischen den Anfragen am Laufen. Der Shield schützt die Anfragen über Velocity genauso wie die über PHP-FPM, mit identischen Antworten: derselbe Status, dieselben Header, dieselbe Protokollzeile. Hinter den Kulissen funktionieren einige Dinge anders.
Inhalt
- Wie der Shield jede Anfrage erreicht
- Wann Sie Velocity neu starten
- Zähler, die alle Prozesse teilen
- Die Extension aktualisieren
- Warum die Antworten gleich sind
Wie der Shield jede Anfrage erreicht
Unter PHP-FPM läuft config.php bei jeder Anfrage, also läuft der Shield dort. Unter Velocity läuft config.php
einmal pro Worker, wenn der Worker startet. Der Hook nennt seine Datei deshalb in EXP_REQUEST_PREPEND_FILE, und
index.php führt diese Datei zu Beginn jeder Anfrage aus.
Das setzt das index.php von 6.0.15 voraus. Mit einem älteren werden die Anfragen über Velocity nicht gefiltert,
die über PHP-FPM schon. Die Übersicht meldet dann „Der Shield lief für diese Seite nicht“, wenn Sie sie über Velocity
öffnen.
Wann Sie Velocity neu starten
| Änderung | Neustart? |
|---|---|
Hook-Zeilen in config.php hinzugefügt oder entfernt | ja: ./console exp:velocity restart |
| eine Regeldatei geändert oder ein Modus auf der Übersicht gewechselt | nein: innerhalb von recheck Sekunden neu gelesen |
| Pausieren oder Einschalten | nein: ab der nächsten Anfrage |
| die Extension aktualisiert | ja, mit einer Pause davor und danach (unten) |
Zähler, die alle Prozesse teilen
Velocity betreibt mehrere Prozesse. Mit dem Speicher in APCu würde jeder Prozess für sich zählen, und eine über die
Worker verteilte Anfrageflut erreichte ihr Limit später. set store file in der Regeldatei lässt alle Worker, und
PHP-FPM, wenn es dieselbe Website ausliefert, die Zähler in var/request-shield/store/ teilen. Der Kasten
Einrichtung auf der Übersicht zeigt den Speicher und seine Stufe.
Die Extension aktualisieren
Ein Worker, der die alten Klassen schon geladen hat, darf nicht auf die neuen Dateien treffen. Aktualisieren Sie in dieser Reihenfolge:
- Pausieren (oder
var/request-shield/PAUSEDanlegen). - Die Extension aktualisieren.
./console exp:velocity restart.- Einschalten (oder
PAUSEDentfernen).
Warum die Antworten gleich sind
In einem Velocity-Worker löst exit() das Exit-Signal von Velocity aus, damit die Anfrage endet und nicht der
Worker. Die Extension lässt dieses Signal durch, wenn der Shield geantwortet hat (eine Abweisung, die Browserprüfung,
eine seiner eigenen Seiten), sodass nichts es für ein Versagen des Shields hält. Sollte eine künftige Bibliothek ihre
inneren Schritte ändern, bemerkt die Extension das und greift auf den einfachen Aufruf der Bibliothek zurück; die
Antworten bleiben richtig, nur der Debug-Header und das Fehlerlog von PHP zeigen dann wieder „shield error“. Die
Einzelheiten stehen in
doc/velocity.md der Extension (auf
Englisch).
Velocity allgemein: Velocity ist Teil von Exponential 6.0.15.