Konfiguracja

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.

Boolean values
truthy on true 1 yes falsy off false 0 no

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 zmiennych
Zmienna Domyślnie Opis
0.0.0.0:80

Adres i port głównego serwera HTTP.

/var/www/html/public

Katalog główny do serwowania plików i skryptów PHP.

(nieustawione)

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.

false

Włącza trwały tryb worker. Wymaga, aby ENTRY_FILE wskazywał na skrypt .php.

10000

Maksymalna liczba jednoczesnych połączeń TCP.

CPU / 2 (min 1)

Wątki asynchronicznego wejścia-wyjścia. 1 = jednowątkowo, N = stała liczba, nieustawiony = automatycznie.

sapi

Backend wykonujący PHP: sapi dla prawdziwego PHP, stub do benchmarkowania bez PHP.

CPU / 2 (min 1)

Rozmiar puli workerów. N = stała pula, MIN:MAX = dynamiczne skalowanie, 0 = automatycznie.

30

Liczba sekund bezczynności dynamicznego workera przed jego wycofaniem.

workers × 128

Maksymalna liczba oczekujących żądań w kolejce PHP; 529 przy zapełnieniu. Dla pul MIN:MAX początkowa liczba workerów = wartość minimalna.

(nieustawione)

Górny limit pamięci na workera w MiB przed jego recyklingiem. 0 = bez ograniczeń. Recykling na żądanie przez Worker::scheduleExit().

true

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 zmiennych
Zmienna Domyślnie Opis
5

Maksymalny czas w sekundach na odebranie nagłówków HTTP po nawiązaniu połączenia (ochrona przed Slowloris).

30

Maksymalny czas w sekundach oczekiwania na trwające połączenia podczas łagodnego zamknięcia.

0 (off)

Maksymalna liczba żądań na IP w oknie. 0 = wyłączone; pełna kolejka PHP odpowiada 529.

60

Czas trwania okna ograniczania liczby żądań w sekundach.

(nieustawione)

Ścieżka do certyfikatu PEM. Aby włączyć TLS, muszą być ustawione zarówno TLS_CERT, jak i TLS_KEY.

(nieustawione)

Ścieżka do klucza prywatnego PEM.

1.2

Minimalna wersja TLS: 1.2 lub 1.3. Weryfikowana przy starcie, nawet gdy TLS jest wyłączony.

PHP_WORKERS_MAX × 4

Maksymalna liczba jednocześnie otwartych strumieni na połączenie.

20

Maksymalna liczba oczekujących ramek RST_STREAM przed zamknięciem połączenia (ochrona przed Rapid Reset).

65536

Maksymalna łączna liczba zdekodowanych bajtów nagłówków na żądanie.

20

Liczba sekund między ramkami PING; 0 wyłącza.

10

Liczba sekund oczekiwania na odpowiedź PING przed zamknięciem połączenia.

30d

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.

off

Ponowna walidacja mtime dla pamięci podręcznej w pamięci — sprawdzana najwyżej co 3 s na plik. Zastępuje STATIC_CACHE.

4

Jakość Brotli 0–11. 0 wyłącza kompresję.

Bezpieczeństwo

5 zmiennych
Zmienna Domyślnie Opis
DENY

Ochrona przed clickjackingiem: DENY, SAMEORIGIN lub off. Ustawia X-Frame-Options + CSP frame-ancestors; nagłówki ustawione przez aplikację zawsze mają pierwszeństwo.

(nieustawione)

Zakresy CIDR zaufanych proxy (lub private). Rzeczywisty IP klienta z Forwarded / X-Forwarded-* metodą rightmost-non-trusted.

(nieustawione)

Wzorce glob, których pliki .php nigdy nie są wykonywane przez bezpośredni URI (/uploads/**). Dopasowywane przed operacjami dyskowymi — nie zdradzają, czy plik istnieje.

404

Odpowiedź przy dopasowaniu do listy blokowania: status HTTP 400–599 lub skrypt fallback PHP z prefiksem / wewnątrz DOCUMENT_ROOT.

(nieustawione)

Ścieżki bezwzględne, pod którymi dowiązania symboliczne mogą wyjść poza DOCUMENT_ROOT. Nieustawiony = brak dozwolonych wyjść.

Logi, ślady i profile

34 zmiennych
Zmienna Domyślnie Opis
info

Poziom szczegółowości logów: trace, debug, info, warn, error.

(nieustawione)

Rejestrowanie dostępu dla każdego żądania: all = każde żądanie, error = tylko 4xx/5xx, nieustawiony = wyłączone.

(nieustawione)

Serwer wewnętrzny (/health, /metrics, /config). Wartości zawierające tylko port wiążą się z 127.0.0.1; nieustawiony = nieuruchomiony.

(nieustawione)

Lista dozwolonych CIDR dla serwera wewnętrznego; obcy otrzymują 403, sondy kontroli stanu pozostają dostępne. Loopback nie jest domyślny.

(nieustawione)

Katalog z niestandardowymi stronami błędów {status}.html.

524288

Maksymalna liczba bajtów ciała dla wewnętrznych endpointów zapytań (512 KiB).

false

Propagacja W3C Trace Context: odczytuje traceparent/tracestate i przekazuje je do PHP przez $_SERVER.

false

Włącza eksport spanów OpenTelemetry. Implikuje TRACE_CONTEXT=true.

grpc

Protokół eksportu: grpc lub http/protobuf.

localhost:4317 / 4318

Endpoint kolektora OTLP.

10000

Limit czasu eksportu w milisekundach.

(nieustawione)

Nagłówki uwierzytelniania: key=value,key2=value2.

oxphp

Nazwa usługi w eksportowanych spanach.

(nieustawione)

Atrybut wersji usługi.

(nieustawione)

Dodatkowe atrybuty zasobu: env=prod,region=us-east-1.

parentbased_traceidratio

Strategia próbkowania: always_on, always_off, traceidratio oraz warianty parentbased_*.

1.0

Współczynnik próbkowania 0.0–1.0 dla samplerów opartych na współczynniku; wartości spoza zakresu są przycinane.

false

APM: automatyczne instrumentowanie 33 funkcji PHP (PDO, mysqli, cURL, Redis…), przechwytywanie błędów, SDK śledzenia. Wymaga OTEL_ENABLED.

100

Próg wolnych zapytań w ms; wolniejsze zapytania do bazy danych otrzymują oxphp.db.slow=true.

false

Zapisuje parametry powiązane w spanach db.params. Wyłącz, jeśli parametry mogą być wrażliwe.

false

Główny przełącznik. Pozostałe zmienne PROFILER_* są nadal parsowane, więc literówki ujawniają się przy starcie.

0.0

Prawdopodobieństwo 0.0–1.0, że żądanie zostanie spróbkowane.

false

Próbkuje także żądania do serwera wewnętrznego.

(nieustawione)

Token Bearer wymagany do profilowania na żądanie przez oxphp_profiler_*().

50000

Limit spanów na żądanie; dłuższe profile są przycinane.

256

Maksymalna głębokość stosu wywołań na próbkę (twardy limit 65535).

/tmp/oxphp-profiles

Katalog na profile zapisywane na dysku.

xhprof,speedscope

Formaty zapisywane na dysk: xhprof, speedscope, pprof, flamegraph.

10

Ograniczenie liczby plików profili zapisywanych na sekundę.

100

Maksymalna liczba przechowywanych plików profili; starsze są usuwane.

(nieustawione)

Zdalny endpoint, do którego wysyłane są profile metodą POST.

xhprof

Format transmisji dla eksportów.

(nieustawione)

Token Bearer wysyłany z każdym eksportem.

(auto-detect)

Opakowanie zgodne z XHGui; nieustawiony = automatyczne wykrywanie na podstawie URL.

Asynchroniczność i stan współdzielony

19 zmiennych
Zmienna Domyślnie Opis
0 (off)

Dedykowane wątki workerów asynchronicznych. 0 = funkcje zarejestrowane, ale rzucające AsyncException przy wywołaniu.

ASYNC_WORKERS × 64

Maksymalna liczba oczekujących zadań w kolejce asynchronicznej. 0 = automatycznie.

256

Limit współbieżnych Fiberów zadań na workera; globalny limit w locie = Fibery × workery.

true

Główny przełącznik dla całego podsystemu OxPHP\Shared\*.

100000

Globalny limit wszystkich wpisów Shared; wstawienia powyżej niego rzucają CapacityException.

1 GiB

Globalny limit szacowanej pamięci dla wszystkich wpisów.

0.7

Rozpoczyna odrzucanie pracy o najniższym priorytecie powyżej tej części limitów.

true

Przełącza ekspozycję Prometheus oxphp_shared_*.

true

Przełącza API introspekcji /__ox_shared/*.

true

Podglądy wartości w odpowiedziach introspekcji; wyłącz, jeśli podglądy mogłyby ujawnić dane.

16

Głębokość BFS przy sprawdzaniu cykli; zwiększ dla głębokich grafów.

10000

Liczba krawędzi przechodzonych podczas sprawdzania cykli; zwiększ dla gęstych grafów.

1 MiB

Limit rozmiaru pojedynczej wartości; większe wstawienia szybko kończą się błędem.

64 MiB

Limit łącznego ładunku na kanał.

false

Panika wewnątrz domknięcia Mutex/Once trwale zatruwa prymityw zamiast próby odzyskania w miarę możliwości.

off

Diagnostyka rywalizacji o blokady: off, count lub trace.

100

Interwał odpytywania dla samplera diagnostyki blokad.

256

Przycinanie pojedynczych ciągów znaków w podglądach /entry.

20

Liczba wpisów próbkowanych w podglądach /entry.

Presets

Example configurations

Starting points straight from the docs — copy one and adjust.

# verbose logs while you build and debug
LOG_LEVEL=debug
# record every request, not just errors
ACCESS_LOG=all
# one worker — deterministic, breakpoint-friendly
PHP_WORKERS=1
# local /health, /metrics and /config endpoints
INTERNAL_ADDR=127.0.0.1:9090
# re-read edited static files without a restart
STATIC_REVALIDATE=on
Inspect the live configuration

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.

curl -s http://localhost:9090/config | jq .

Zero configuration is a valid configuration

Every default above is chosen so an empty environment just works.