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.
Serveur et workers
12 variablesAdresse et port du serveur HTTP principal.
Répertoire racine pour servir les fichiers et les scripts PHP.
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.
Active le mode worker persistant. Nécessite qu'ENTRY_FILE pointe vers un script .php.
Nombre maximal de connexions TCP simultanées.
Threads d'E/S asynchrones. 1 = mono-thread, N = nombre fixe, non défini = auto.
Backend d'exécution PHP : sapi pour du vrai PHP, stub pour le benchmark sans PHP.
Taille du pool de workers. N = pool fixe, MIN:MAX = mise à l'échelle dynamique, 0 = auto.
Secondes pendant lesquelles un worker dynamique reste inactif avant d'être retiré.
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.
Plafond mémoire par worker en Mio avant recyclage. 0 = illimité. Recyclage à la demande via Worker::scheduleExit().
Renseigne $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER et php://input avant chaque script. Falsy = API objet uniquement (oxphp_http_request()).
Trafic et distribution
15 variablesNombre maximal de secondes pour recevoir les en-têtes HTTP après la connexion (protection contre Slowloris).
Nombre maximal de secondes d'attente des connexions en cours lors d'un arrêt gracieux.
Nombre maximal de requêtes par IP et par fenêtre. 0 = désactivé ; une file PHP pleine répond 529.
Durée de la fenêtre de limitation de débit en secondes.
Chemin vers le certificat PEM. TLS_CERT et TLS_KEY doivent tous deux être définis pour activer TLS.
Chemin vers la clé privée PEM.
Version TLS minimale : 1.2 ou 1.3. Validée au démarrage même lorsque TLS est désactivé.
Nombre maximal de flux ouverts simultanément par connexion.
Nombre maximal de trames RST_STREAM en file avant la fermeture de la connexion (protection contre Rapid Reset).
Nombre maximal d'octets d'en-têtes décodés au total par requête.
Secondes entre les trames PING ; 0 désactive.
Secondes d'attente d'une réponse PING avant la fermeture de la connexion.
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.
Revalidation par mtime pour le cache en mémoire — vérifiée au plus toutes les 3 s par fichier. Remplace STATIC_CACHE.
Qualité Brotli 0–11. 0 désactive la compression.
Sécurité
5 variablesProtection 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.
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.
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.
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.
Chemins absolus sous lesquels les liens symboliques peuvent sortir de DOCUMENT_ROOT. Non défini = aucune sortie autorisée.
Journaux, traces et profils
34 variablesVerbosité des journaux : trace, debug, info, warn, error.
Journal d'accès par requête : all = chaque requête, error = uniquement 4xx/5xx, non défini = désactivé.
Serveur interne (/health, /metrics, /config). Les valeurs à port seul écoutent sur 127.0.0.1 ; non défini = non démarré.
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.
Répertoire contenant des pages d'erreur {status}.html personnalisées.
Nombre maximal d'octets de corps pour les endpoints de requête internes (512 Kio).
Propagation W3C Trace Context : lit traceparent/tracestate et les transmet à PHP via $_SERVER.
Active l'export des spans OpenTelemetry. Implique TRACE_CONTEXT=true.
Protocole d'export : grpc ou http/protobuf.
Endpoint du collecteur OTLP.
Délai d'expiration de l'export en millisecondes.
En-têtes d'authentification : key=value,key2=value2.
Nom du service dans les spans exportés.
Attribut de version du service.
Attributs de ressource supplémentaires : env=prod,region=us-east-1.
Stratégie d'échantillonnage : always_on, always_off, traceidratio et les variantes parentbased_*.
Ratio d'échantillonnage 0.0–1.0 pour les échantillonneurs basés sur un ratio ; les valeurs hors plage sont bornées.
APM : auto-instrumentation de 33 fonctions PHP (PDO, mysqli, cURL, Redis…), capture des erreurs, SDK de traçage. Nécessite OTEL_ENABLED.
Seuil de requête lente en ms ; les requêtes de base de données plus lentes reçoivent oxphp.db.slow=true.
Enregistre les paramètres liés dans les spans db.params. À désactiver si les paramètres peuvent être sensibles.
Interrupteur principal. Les autres variables PROFILER_* sont tout de même analysées, de sorte que les fautes de frappe apparaissent au démarrage.
Probabilité 0.0–1.0 qu'une requête soit échantillonnée.
Échantillonne aussi les requêtes vers le serveur interne.
Jeton Bearer requis pour le profilage à la demande via oxphp_profiler_*().
Limite de spans par requête ; les profils plus longs sont tronqués.
Profondeur maximale de la pile d'appels par échantillon (limite stricte 65535).
Répertoire pour les profils sur disque.
Formats écrits sur disque : xhprof, speedscope, pprof, flamegraph.
Limite de débit sur le nombre de fichiers de profil écrits par seconde.
Nombre maximal de fichiers de profil conservés ; les plus anciens sont supprimés.
Endpoint distant vers lequel envoyer les profils en POST.
Format de transmission pour les exports.
Jeton Bearer envoyé avec chaque export.
Enveloppe compatible XHGui ; non défini = détection automatique à partir de l'URL.
Asynchrone et état partagé
19 variablesThreads worker asynchrones dédiés. 0 = fonctions enregistrées mais levant AsyncException à l'appel.
Nombre maximal de tâches en attente dans la file asynchrone. 0 = auto.
Limite par worker de Fibers de tâches concurrentes ; limite globale en cours = Fibers × workers.
Interrupteur principal pour l'ensemble du sous-système OxPHP\Shared\*.
Limite globale sur toutes les entrées Shared ; les insertions au-delà lèvent CapacityException.
Limite globale sur la mémoire estimée de toutes les entrées.
Commence à délester le travail de plus basse priorité au-delà de cette fraction des limites.
Active ou désactive l'exposition Prometheus oxphp_shared_*.
Active ou désactive l'API d'introspection /__ox_shared/*.
Aperçus des valeurs dans les réponses d'introspection ; à désactiver si les aperçus peuvent divulguer des données.
Profondeur BFS pour la détection de cycles ; à augmenter pour les graphes profonds.
Arêtes parcourues lors de la détection de cycles ; à augmenter pour les graphes denses.
Limite de taille par valeur ; les insertions plus grandes échouent immédiatement.
Limite de charge utile totale par canal.
Une panique dans une closure Mutex/Once empoisonne définitivement la primitive au lieu d'une récupération au mieux.
Diagnostics de contention de verrou : off, count ou trace.
Intervalle d'interrogation pour l'échantillonneur de diagnostics de verrou.
Troncature par chaîne dans les aperçus /entry.
Entrées échantillonnées dans les aperçus /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.