Dokumentacja OxPHP
OxPHP to wydajny serwer aplikacji PHP, który zastępuje nginx + PHP-FPM pojedynczym plikiem binarnym — w komplecie wbudowany TLS, kompresja Brotli, ograniczanie liczby żądań, kontrole stanu, metryki Prometheus, strumieniowanie SSE oraz trwały tryb worker.
Dlaczego OxPHP
Typowa aplikacja PHP na produkcji to kilka kontenerów: nginx, PHP-FPM, czasem osobne proxy TLS i eksporter metryk. Konfiguracja jest rozproszona pomiędzy nimi, a doprowadzenie do tego, by wszystko działało razem, wymaga utrzymywania spójności ustawień gniazd, limitów czasu i ścieżek. OxPHP zastępuje cały ten stos jednym kontenerem. W środku jest jeden proces, który przyjmuje połączenia HTTP, wykonuje PHP i serwuje pliki statyczne.
Serwer działa od razu po uruchomieniu, z rozsądnymi wartościami domyślnymi. Dostrajanie odbywa się poprzez zmienne środowiskowe: TLS włącza się dwiema zmiennymi (TLS_CERT, TLS_KEY), ograniczanie liczby żądań jedną (RATE_LIMIT), a kompresja Brotli jest włączona domyślnie. Nie trzeba edytować konfiguracji nginx ani budować osobnych modułów.
Na dedykowanym porcie wewnętrznym dostępne są kontrole stanu (/health), metryki Prometheus (/metrics) oraz migawka konfiguracji (/config). To wystarcza dla sond liveness/readiness w Kubernetesie oraz do podłączenia Grafany, bez dodatkowych kontenerów sidecar.
Logi mają postać ustrukturyzowanego JSON-a: metoda, ścieżka, status, czas odpowiedzi oraz ID żądania w każdej linii. Łatwo je parsować w Loki, Elasticsearchu czy dowolnym innym narzędziu, bez dodatkowych wzorców grok.
Aby wypróbować tryb worker, w którym proces PHP nie jest tworzony na nowo przy każdym żądaniu, ustaw WORKER_MODE_ENABLED=true i ENTRY_FILE=worker.php. Framework inicjalizuje się raz, a następnie obsługuje tysiące żądań bez przeładowywania. Aby wrócić do klasycznego trybu, usuń tę zmienną.
OxPHP zawiera też możliwości, które zwykle wymagają osobnych narzędzi lub bibliotek firm trzecich:
- Serwowanie plików statycznych — buforowanie w pamięci, ETag/Last-Modified, automatyczne typy MIME
- Trzy tryby routingu — plikowy, frameworkowy i SPA (każdy można łączyć z trwałym trybem worker)
- Wczesna odpowiedź — wyślij odpowiedź natychmiast i kontynuuj przetwarzanie w tle
- Tryb worker — trwałe procesy PHP z multipleksowaniem Fiberów
- Strumieniowanie SSE — Server-Sent Events z PHP w czasie rzeczywistym
- Asynchroniczne promisy — wykonywanie domknięć PHP w tle bez blokowania workera
- Stan współdzielony — współbieżne prymitywy obejmujące cały proces (Counter, Flag, Once, Mutex, Channel, Map, Pool), dzięki którym workery mogą się koordynować bez Redisa czy APCu
- Dekoratory — przechwytywanie wywołań za pomocą atrybutów PHP 8
- Śledzenie rozproszone i APM — W3C Trace Context, OpenTelemetry, automatyczna instrumentacja wywołań bazy danych/HTTP/cache/plików oraz SDK do śledzenia w PHP
Pierwsze kroki
- Szybki start — zbuduj i uruchom swoją pierwszą aplikację OxPHP w niecałe 5 minut
- Instalacja — wymagania systemowe i opcje instalacji
- Przewodnik po Dockerze — pliki Dockerfile, konfiguracja Compose, wolumeny i wzorce wdrożeniowe
- Interfejs wiersza poleceń — składnia polecenia
oxphp:serve,runpojedynczego skryptu PHP,configoraz zrzucanie uprawnień przez--user
Operacje
- Dokumentacja konfiguracji — kompletna lista zmiennych środowiskowych z wartościami domyślnymi i opisami
- Kontrole stanu — endpointy serwera wewnętrznego
/health,/metricsi/config - Metryki — dokumentacja metryk zgodnych z Prometheusem
- Łagodne zamknięcie — zachowanie przy opróżnianiu, limity czasu i sekwencja zamykania
Funkcje
- Routing — trzy tryby routingu: tradycyjne mapowanie plików, frameworkowy front-controller oraz przekierowanie awaryjne SPA. Tryb worker to ortogonalny przełącznik modelu wykonania i działa na wierzchu dowolnego trybu routingu
- Pliki statyczne — cache plików, wykrywanie typów MIME, nagłówki ETag/Last-Modified oraz strumieniowanie
- Tryb worker — trwałe procesy PHP z automatycznym miękkim resetem między żądaniami
- Multipleksowanie Fiberów — obsługa setek współbieżnych żądań na wątek workera dzięki kooperacyjnej wielozadaniowości
- Kompresja — kompresja Brotli dla odpowiedzi tekstowych
- TLS — wbudowana terminacja TLS z konfiguracją certyfikatu i klucza
- Ograniczanie liczby żądań — ograniczanie liczby żądań per-IP z konfigurowalnymi oknami i limitami
- Limity czasu — limity czasu odczytu nagłówków oraz żądania
- Rejestrowanie dostępu — ustrukturyzowane logi dostępu w formacie JSON z ID żądania, metodą, ścieżką, statusem i czasem trwania
- ID żądań — automatyczne generowanie i przekazywanie nagłówka
X-Request-ID - Strony błędów — własne strony błędów w HTML dla dowolnego kodu statusu HTTP
- SSE — strumieniowanie Server-Sent Events z PHP w czasie rzeczywistym
- Wczesna odpowiedź — wyślij odpowiedź natychmiast i kontynuuj przetwarzanie w tle
- Asynchroniczne promisy — uruchamiaj domknięcia PHP w wątkach w tle i oczekuj na wyniki
- Dekoratory — przechwytywanie wywołań funkcji i metod za pomocą atrybutów PHP 8
- Śledzenie rozproszone i APM — W3C Trace Context, OpenTelemetry, automatyczna instrumentacja oraz SDK do śledzenia w PHP
- Serwer wewnętrzny — dedykowany port dla kontroli stanu, metryk Prometheus oraz podglądu bieżącej konfiguracji
Bezpieczeństwo
- Blokowanie ścieżek z kropką — automatyczne blokowanie ukrytych plików i katalogów (
.env,.git/,.htaccess) - Zaufane proxy — wydobywanie prawdziwego IP klienta z nagłówków
Forwarded(RFC 7239) orazX-Forwarded-*z zaufaniem opartym na CIDR - Lista blokowania wykonywania PHP — blokowanie wykonywania
.phpw zapisywalnych ścieżkach publicznych (np./uploads/**lub konkretnych starszych skryptów), aby udaremnić ataki z wgranymi shellami na starsze aplikacje - Dozwolone ścieżki dowiązań symbolicznych — opcjonalna lista dozwolonych celów dowiązań symbolicznych poza
DOCUMENT_ROOT; obsługujestorage:linkw stylu Laravela oraz współdzielone wolumeny zasobów bez osłabiania domyślnej ochrony przed ucieczką przez dowiązania symboliczne
PHP
- API żądania HTTP — obiektowy dostęp do żądania przez
oxphp_http_request(): parametry zapytania, sparsowane ciało, nagłówki, ciasteczka, przesłane pliki i więcej - Funkcje — wbudowane funkcje PHP dostarczane przez OxPHP (
oxphp_worker(),oxphp_request_id(),oxphp_server_info()i więcej) - Superglobalne — jak wypełniane są
$_SERVER,$_GET,$_POST,$_COOKIE,$_FILESorazphp://input - OPcache i JIT — konfiguracja OPcache oraz ustawienia kompilacji JIT
Stan współdzielony
Współbieżne prymitywy obejmujące cały proces, dzięki którym workery mogą koordynować zmienny stan bez Redisa, Memcached czy APCu — wszystko żyje wewnątrz procesu, więc koszt pojedynczej operacji liczony jest w mikrosekundach, a nie w rundach sieciowych.
- Wprowadzenie — model rejestru, cykl życia uchwytu oraz kiedy sięgać po stan współdzielony
- Rejestr — rejestr obejmujący cały proces, cykl życia wpisu oraz introspekcja
- Counter — atomowy akumulator int64 (
get,set,add,compareAndSet) - Atomic — atomowy int64 z jawną kontrolą uporządkowania pamięci
- Flag — atomowa wartość logiczna dla jednorazowych przejść
- Once — kontener uruchamiany raz z fabryką bezpieczną przy reentrancji
- Mutex — zatruwalny mutex nad przechowywaną wartością z wykrywaniem zakleszczeń
- Channel — ograniczona kolejka MPMC świadoma Fiberów
- Map — współbieżny magazyn kluczowany stringami z dostępem wsadowym
- Pool — ograniczona pula obiektów z powinowactwem per-wątek
- Konwencje nazewnicze — ściągawka nazewnictwa metod w całej rodzinie
Shared\* - Obserwowalność — liczniki Prometheus oraz endpointy introspekcji JSON
- Migracja do zewnętrznego magazynu — kiedy i jak przejść na Redisa lub APCu
Architektura
- Przegląd architektury — jak działa OxPHP: asynchroniczna obsługa HTTP, pula workerów PHP, przepływ żądania oraz gwarancje bezpieczeństwa
Przykłady
Kompletne przepisy na uruchamianie popularnych aplikacji PHP na OxPHP — każdy to gotowy projekt Docker Compose z plikiem Dockerfile, docker-compose.yml, krokami instalacji oraz uwagami specyficznymi dla OxPHP, których standardowa dokumentacja (nginx + PHP-FPM) nie obejmuje.
- Przykładowe wdrożenia — przegląd, macierz dziewięciu aplikacji oraz wzorce wspólne dla każdego przepisu
- Tryb frameworkowy: Laravel · Symfony · Yii3
- CMS: WordPress · Drupal · Craft CMS · October CMS
- E-commerce: Magento · OpenCart