Every setting is one environment variable
There are no config files. Every setting is an environment variable, and every variable has a default that holds up in production. Deploy an empty environment, then override only the variables you actually care about.
Anything outside this set — typos like "ture" — fails fast at startup, naming the variable. Empty equals unset: FOO=${FOO} substitutions that produce FOO= fall back to the default instead of refusing to start.
Serwer i workery
12 zmiennychAdres i port głównego serwera HTTP.
Katalog główny do serwowania plików i skryptów PHP.
Pojedynczy kanoniczny plik wejściowy. Nieustawiony = bezpośrednie mapowanie plików, *.php = front controller, plik inny niż .php = fallback SPA; w trybie worker — bootstrap workera. Rozwiązywany względem DOCUMENT_ROOT.
Włącza trwały tryb worker. Wymaga, aby ENTRY_FILE wskazywał na skrypt .php.
Maksymalna liczba jednoczesnych połączeń TCP.
Wątki asynchronicznego wejścia-wyjścia. 1 = jednowątkowo, N = stała liczba, nieustawiony = automatycznie.
Backend wykonujący PHP: sapi dla prawdziwego PHP, stub do benchmarkowania bez PHP.
Rozmiar puli workerów. N = stała pula, MIN:MAX = dynamiczne skalowanie, 0 = automatycznie.
Liczba sekund bezczynności dynamicznego workera przed jego wycofaniem.
Maksymalna liczba oczekujących żądań w kolejce PHP; 529 przy zapełnieniu. Dla pul MIN:MAX początkowa liczba workerów = wartość minimalna.
Górny limit pamięci na workera w MiB przed jego recyklingiem. 0 = bez ograniczeń. Recykling na żądanie przez Worker::scheduleExit().
Wypełnia $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER i php://input przed każdym skryptem. Wartość fałszywa = wyłącznie API obiektowe (oxphp_http_request()).
Ruch i dostarczanie
15 zmiennychMaksymalny czas w sekundach na odebranie nagłówków HTTP po nawiązaniu połączenia (ochrona przed Slowloris).
Maksymalny czas w sekundach oczekiwania na trwające połączenia podczas łagodnego zamknięcia.
Maksymalna liczba żądań na IP w oknie. 0 = wyłączone; pełna kolejka PHP odpowiada 529.
Czas trwania okna ograniczania liczby żądań w sekundach.
Ścieżka do certyfikatu PEM. Aby włączyć TLS, muszą być ustawione zarówno TLS_CERT, jak i TLS_KEY.
Ścieżka do klucza prywatnego PEM.
Minimalna wersja TLS: 1.2 lub 1.3. Weryfikowana przy starcie, nawet gdy TLS jest wyłączony.
Maksymalna liczba jednocześnie otwartych strumieni na połączenie.
Maksymalna liczba oczekujących ramek RST_STREAM przed zamknięciem połączenia (ochrona przed Rapid Reset).
Maksymalna łączna liczba zdekodowanych bajtów nagłówków na żądanie.
Liczba sekund między ramkami PING; 0 wyłącza.
Liczba sekund oczekiwania na odpowiedź PING przed zamknięciem połączenia.
Cache-Control: max-age dla plików statycznych. Przyjmuje 30s, 5m, 2h, 30d, 1w, 1y, samą liczbę sekund lub off. Zastępuje STATIC_CACHE_TTL.
Ponowna walidacja mtime dla pamięci podręcznej w pamięci — sprawdzana najwyżej co 3 s na plik. Zastępuje STATIC_CACHE.
Jakość Brotli 0–11. 0 wyłącza kompresję.
Bezpieczeństwo
5 zmiennychOchrona przed clickjackingiem: DENY, SAMEORIGIN lub off. Ustawia X-Frame-Options + CSP frame-ancestors; nagłówki ustawione przez aplikację zawsze mają pierwszeństwo.
Zakresy CIDR zaufanych proxy (lub private). Rzeczywisty IP klienta z Forwarded / X-Forwarded-* metodą rightmost-non-trusted.
Wzorce glob, których pliki .php nigdy nie są wykonywane przez bezpośredni URI (/uploads/**). Dopasowywane przed operacjami dyskowymi — nie zdradzają, czy plik istnieje.
Odpowiedź przy dopasowaniu do listy blokowania: status HTTP 400–599 lub skrypt fallback PHP z prefiksem / wewnątrz DOCUMENT_ROOT.
Ścieżki bezwzględne, pod którymi dowiązania symboliczne mogą wyjść poza DOCUMENT_ROOT. Nieustawiony = brak dozwolonych wyjść.
Logi, ślady i profile
34 zmiennychPoziom szczegółowości logów: trace, debug, info, warn, error.
Rejestrowanie dostępu dla każdego żądania: all = każde żądanie, error = tylko 4xx/5xx, nieustawiony = wyłączone.
Serwer wewnętrzny (/health, /metrics, /config). Wartości zawierające tylko port wiążą się z 127.0.0.1; nieustawiony = nieuruchomiony.
Lista dozwolonych CIDR dla serwera wewnętrznego; obcy otrzymują 403, sondy kontroli stanu pozostają dostępne. Loopback nie jest domyślny.
Katalog z niestandardowymi stronami błędów {status}.html.
Maksymalna liczba bajtów ciała dla wewnętrznych endpointów zapytań (512 KiB).
Propagacja W3C Trace Context: odczytuje traceparent/tracestate i przekazuje je do PHP przez $_SERVER.
Włącza eksport spanów OpenTelemetry. Implikuje TRACE_CONTEXT=true.
Protokół eksportu: grpc lub http/protobuf.
Endpoint kolektora OTLP.
Limit czasu eksportu w milisekundach.
Nagłówki uwierzytelniania: key=value,key2=value2.
Nazwa usługi w eksportowanych spanach.
Atrybut wersji usługi.
Dodatkowe atrybuty zasobu: env=prod,region=us-east-1.
Strategia próbkowania: always_on, always_off, traceidratio oraz warianty parentbased_*.
Współczynnik próbkowania 0.0–1.0 dla samplerów opartych na współczynniku; wartości spoza zakresu są przycinane.
APM: automatyczne instrumentowanie 33 funkcji PHP (PDO, mysqli, cURL, Redis…), przechwytywanie błędów, SDK śledzenia. Wymaga OTEL_ENABLED.
Próg wolnych zapytań w ms; wolniejsze zapytania do bazy danych otrzymują oxphp.db.slow=true.
Zapisuje parametry powiązane w spanach db.params. Wyłącz, jeśli parametry mogą być wrażliwe.
Główny przełącznik. Pozostałe zmienne PROFILER_* są nadal parsowane, więc literówki ujawniają się przy starcie.
Prawdopodobieństwo 0.0–1.0, że żądanie zostanie spróbkowane.
Próbkuje także żądania do serwera wewnętrznego.
Token Bearer wymagany do profilowania na żądanie przez oxphp_profiler_*().
Limit spanów na żądanie; dłuższe profile są przycinane.
Maksymalna głębokość stosu wywołań na próbkę (twardy limit 65535).
Katalog na profile zapisywane na dysku.
Formaty zapisywane na dysk: xhprof, speedscope, pprof, flamegraph.
Ograniczenie liczby plików profili zapisywanych na sekundę.
Maksymalna liczba przechowywanych plików profili; starsze są usuwane.
Zdalny endpoint, do którego wysyłane są profile metodą POST.
Format transmisji dla eksportów.
Token Bearer wysyłany z każdym eksportem.
Opakowanie zgodne z XHGui; nieustawiony = automatyczne wykrywanie na podstawie URL.
Asynchroniczność i stan współdzielony
19 zmiennychDedykowane wątki workerów asynchronicznych. 0 = funkcje zarejestrowane, ale rzucające AsyncException przy wywołaniu.
Maksymalna liczba oczekujących zadań w kolejce asynchronicznej. 0 = automatycznie.
Limit współbieżnych Fiberów zadań na workera; globalny limit w locie = Fibery × workery.
Główny przełącznik dla całego podsystemu OxPHP\Shared\*.
Globalny limit wszystkich wpisów Shared; wstawienia powyżej niego rzucają CapacityException.
Globalny limit szacowanej pamięci dla wszystkich wpisów.
Rozpoczyna odrzucanie pracy o najniższym priorytecie powyżej tej części limitów.
Przełącza ekspozycję Prometheus oxphp_shared_*.
Przełącza API introspekcji /__ox_shared/*.
Podglądy wartości w odpowiedziach introspekcji; wyłącz, jeśli podglądy mogłyby ujawnić dane.
Głębokość BFS przy sprawdzaniu cykli; zwiększ dla głębokich grafów.
Liczba krawędzi przechodzonych podczas sprawdzania cykli; zwiększ dla gęstych grafów.
Limit rozmiaru pojedynczej wartości; większe wstawienia szybko kończą się błędem.
Limit łącznego ładunku na kanał.
Panika wewnątrz domknięcia Mutex/Once trwale zatruwa prymityw zamiast próby odzyskania w miarę możliwości.
Diagnostyka rywalizacji o blokady: off, count lub trace.
Interwał odpytywania dla samplera diagnostyki blokad.
Przycinanie pojedynczych ciągów znaków w podglądach /entry.
Liczba wpisów próbkowanych w podglądach /entry.
Example configurations
Starting points straight from the docs — copy one and adjust.
With the internal server running, /config returns the resolved configuration as JSON. TLS paths, INTERNAL_ADDR and ERROR_PAGES_DIR are scrubbed from the response.
Zero configuration is a valid configuration
Every default above is chosen so an empty environment just works.