Configuration

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.

Serveur et workers

12 variables
Variable Par défaut Description
0.0.0.0:80

Adresse et port du serveur HTTP principal.

/var/www/html/public

Répertoire racine pour servir les fichiers et les scripts PHP.

(non défini)

Script d'entrée canonique unique. Non défini = mappage direct des fichiers, *.php = contrôleur frontal, non-.php = fallback SPA ; en mode worker — le bootstrap du worker. Résolu par rapport à DOCUMENT_ROOT.

false

Active le mode worker persistant. Nécessite qu'ENTRY_FILE pointe vers un script .php.

10000

Nombre maximal de connexions TCP simultanées.

CPU / 2 (min 1)

Threads d'E/S asynchrones. 1 = mono-thread, N = nombre fixe, non défini = auto.

sapi

Backend d'exécution PHP : sapi pour du vrai PHP, stub pour le benchmark sans PHP.

CPU / 2 (min 1)

Taille du pool de workers. N = pool fixe, MIN:MAX = mise à l'échelle dynamique, 0 = auto.

30

Secondes pendant lesquelles un worker dynamique reste inactif avant d'être retiré.

workers × 128

Nombre maximal de requêtes en attente dans la file PHP ; 529 lorsqu'elle est pleine. Pour les pools MIN:MAX, les workers initiaux = le minimum.

(non défini)

Plafond mémoire par worker en Mio avant recyclage. 0 = illimité. Recyclage à la demande via Worker::scheduleExit().

true

Renseigne $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER et php://input avant chaque script. Falsy = API objet uniquement (oxphp_http_request()).

Trafic et distribution

15 variables
Variable Par défaut Description
5

Nombre maximal de secondes pour recevoir les en-têtes HTTP après la connexion (protection contre Slowloris).

30

Nombre maximal de secondes d'attente des connexions en cours lors d'un arrêt gracieux.

0 (off)

Nombre maximal de requêtes par IP et par fenêtre. 0 = désactivé ; une file PHP pleine répond 529.

60

Durée de la fenêtre de limitation de débit en secondes.

(non défini)

Chemin vers le certificat PEM. TLS_CERT et TLS_KEY doivent tous deux être définis pour activer TLS.

(non défini)

Chemin vers la clé privée PEM.

1.2

Version TLS minimale : 1.2 ou 1.3. Validée au démarrage même lorsque TLS est désactivé.

PHP_WORKERS_MAX × 4

Nombre maximal de flux ouverts simultanément par connexion.

20

Nombre maximal de trames RST_STREAM en file avant la fermeture de la connexion (protection contre Rapid Reset).

65536

Nombre maximal d'octets d'en-têtes décodés au total par requête.

20

Secondes entre les trames PING ; 0 désactive.

10

Secondes d'attente d'une réponse PING avant la fermeture de la connexion.

30d

Cache-Control : max-age pour les fichiers statiques. Accepte 30s, 5m, 2h, 30d, 1w, 1y, un nombre de secondes brut ou off. Remplace STATIC_CACHE_TTL.

off

Revalidation par mtime pour le cache en mémoire — vérifiée au plus toutes les 3 s par fichier. Remplace STATIC_CACHE.

4

Qualité Brotli 0–11. 0 désactive la compression.

Sécurité

5 variables
Variable Par défaut Description
DENY

Protection contre le clickjacking : DENY, SAMEORIGIN ou off. Définit X-Frame-Options + CSP frame-ancestors ; les en-têtes définis par l'application l'emportent toujours.

(non défini)

CIDR des proxys de confiance (ou private). Adresse IP réelle du client extraite de Forwarded / X-Forwarded-* via l'entrée la plus à droite non approuvée.

(non défini)

Motifs glob dont les fichiers .php ne s'exécutent jamais via une URI directe (/uploads/**). Comparés avant toute E/S disque — aucun oracle d'existence.

404

Réponse en cas de correspondance de refus : un statut HTTP 400–599 ou un script PHP de repli préfixé par / dans DOCUMENT_ROOT.

(non défini)

Chemins absolus sous lesquels les liens symboliques peuvent sortir de DOCUMENT_ROOT. Non défini = aucune sortie autorisée.

Journaux, traces et profils

34 variables
Variable Par défaut Description
info

Verbosité des journaux : trace, debug, info, warn, error.

(non défini)

Journal d'accès par requête : all = chaque requête, error = uniquement 4xx/5xx, non défini = désactivé.

(non défini)

Serveur interne (/health, /metrics, /config). Les valeurs à port seul écoutent sur 127.0.0.1 ; non défini = non démarré.

(non défini)

Liste d'autorisation CIDR pour le serveur interne ; les tiers reçoivent un 403, les sondes de santé restent accessibles. Le loopback n'est pas implicite.

(non défini)

Répertoire contenant des pages d'erreur {status}.html personnalisées.

524288

Nombre maximal d'octets de corps pour les endpoints de requête internes (512 Kio).

false

Propagation W3C Trace Context : lit traceparent/tracestate et les transmet à PHP via $_SERVER.

false

Active l'export des spans OpenTelemetry. Implique TRACE_CONTEXT=true.

grpc

Protocole d'export : grpc ou http/protobuf.

localhost:4317 / 4318

Endpoint du collecteur OTLP.

10000

Délai d'expiration de l'export en millisecondes.

(non défini)

En-têtes d'authentification : key=value,key2=value2.

oxphp

Nom du service dans les spans exportés.

(non défini)

Attribut de version du service.

(non défini)

Attributs de ressource supplémentaires : env=prod,region=us-east-1.

parentbased_traceidratio

Stratégie d'échantillonnage : always_on, always_off, traceidratio et les variantes parentbased_*.

1.0

Ratio d'échantillonnage 0.0–1.0 pour les échantillonneurs basés sur un ratio ; les valeurs hors plage sont bornées.

false

APM : auto-instrumentation de 33 fonctions PHP (PDO, mysqli, cURL, Redis…), capture des erreurs, SDK de traçage. Nécessite OTEL_ENABLED.

100

Seuil de requête lente en ms ; les requêtes de base de données plus lentes reçoivent oxphp.db.slow=true.

false

Enregistre les paramètres liés dans les spans db.params. À désactiver si les paramètres peuvent être sensibles.

false

Interrupteur principal. Les autres variables PROFILER_* sont tout de même analysées, de sorte que les fautes de frappe apparaissent au démarrage.

0.0

Probabilité 0.0–1.0 qu'une requête soit échantillonnée.

false

Échantillonne aussi les requêtes vers le serveur interne.

(non défini)

Jeton Bearer requis pour le profilage à la demande via oxphp_profiler_*().

50000

Limite de spans par requête ; les profils plus longs sont tronqués.

256

Profondeur maximale de la pile d'appels par échantillon (limite stricte 65535).

/tmp/oxphp-profiles

Répertoire pour les profils sur disque.

xhprof,speedscope

Formats écrits sur disque : xhprof, speedscope, pprof, flamegraph.

10

Limite de débit sur le nombre de fichiers de profil écrits par seconde.

100

Nombre maximal de fichiers de profil conservés ; les plus anciens sont supprimés.

(non défini)

Endpoint distant vers lequel envoyer les profils en POST.

xhprof

Format de transmission pour les exports.

(non défini)

Jeton Bearer envoyé avec chaque export.

(auto-detect)

Enveloppe compatible XHGui ; non défini = détection automatique à partir de l'URL.

Asynchrone et état partagé

19 variables
Variable Par défaut Description
0 (off)

Threads worker asynchrones dédiés. 0 = fonctions enregistrées mais levant AsyncException à l'appel.

ASYNC_WORKERS × 64

Nombre maximal de tâches en attente dans la file asynchrone. 0 = auto.

256

Limite par worker de Fibers de tâches concurrentes ; limite globale en cours = Fibers × workers.

true

Interrupteur principal pour l'ensemble du sous-système OxPHP\Shared\*.

100000

Limite globale sur toutes les entrées Shared ; les insertions au-delà lèvent CapacityException.

1 GiB

Limite globale sur la mémoire estimée de toutes les entrées.

0.7

Commence à délester le travail de plus basse priorité au-delà de cette fraction des limites.

true

Active ou désactive l'exposition Prometheus oxphp_shared_*.

true

Active ou désactive l'API d'introspection /__ox_shared/*.

true

Aperçus des valeurs dans les réponses d'introspection ; à désactiver si les aperçus peuvent divulguer des données.

16

Profondeur BFS pour la détection de cycles ; à augmenter pour les graphes profonds.

10000

Arêtes parcourues lors de la détection de cycles ; à augmenter pour les graphes denses.

1 MiB

Limite de taille par valeur ; les insertions plus grandes échouent immédiatement.

64 MiB

Limite de charge utile totale par canal.

false

Une panique dans une closure Mutex/Once empoisonne définitivement la primitive au lieu d'une récupération au mieux.

off

Diagnostics de contention de verrou : off, count ou trace.

100

Intervalle d'interrogation pour l'échantillonneur de diagnostics de verrou.

256

Troncature par chaîne dans les aperçus /entry.

20

Entrées échantillonnées dans les aperçus /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.