Конфигурация

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.

Сервер и воркеры

12 переменных
Переменная По умолчанию Описание
0.0.0.0:80

Адрес и порт основного HTTP-сервера.

/var/www/html/public

Корневой каталог для отдачи файлов и PHP-скриптов.

(не задано)

Единый канонический входной скрипт. Не задан = прямое сопоставление файлов, *.php = фронт-контроллер, не-.php = SPA-фолбэк; в режиме воркеров — бутстрап воркера. Разрешается относительно DOCUMENT_ROOT.

false

Включает постоянный режим воркеров. Требует, чтобы ENTRY_FILE указывал на .php-скрипт.

10000

Максимальное число одновременных TCP-соединений.

CPU / 2 (min 1)

Потоки асинхронного ввода-вывода. 1 = однопоточный режим, N = фиксированное количество, не задано = авто.

sapi

Бэкенд исполнения PHP: sapi — настоящий PHP, stub — для бенчмаркинга без PHP.

CPU / 2 (min 1)

Размер пула воркеров. N = фиксированный пул, MIN:MAX = динамическое масштабирование, 0 = авто.

30

Сколько секунд динамический воркер простаивает перед выводом из пула.

workers × 128

Максимум ожидающих запросов в очереди PHP; при заполнении возвращается 529. Для пулов MIN:MAX начальное число воркеров равно минимуму.

(не задано)

Потолок памяти на воркер в МиБ перед его пересозданием. 0 = без ограничений. Пересоздание по требованию через Worker::scheduleExit().

true

Заполняет $_GET, $_POST, $_COOKIE, $_FILES, $_SERVER и php://input перед каждым скриптом. Ложное значение = только объектный API (oxphp_http_request()).

Трафик и доставка

15 переменных
Переменная По умолчанию Описание
5

Максимум секунд на получение HTTP-заголовков после установки соединения (защита от Slowloris).

30

Максимум секунд ожидания незавершённых соединений при корректном завершении работы.

0 (off)

Максимум запросов с одного IP за окно. 0 = выключено; при заполненной очереди PHP возвращается 529.

60

Длительность окна ограничения частоты запросов в секундах.

(не задано)

Путь к PEM-сертификату. Для включения TLS должны быть заданы и TLS_CERT, и TLS_KEY.

(не задано)

Путь к приватному ключу в формате PEM.

1.2

Минимальная версия TLS: 1.2 или 1.3. Проверяется при запуске, даже если TLS выключен.

PHP_WORKERS_MAX × 4

Максимум одновременно открытых потоков на соединение.

20

Максимум фреймов RST_STREAM в очереди до закрытия соединения (защита от Rapid Reset).

65536

Максимальный суммарный размер декодированных заголовков (в байтах) на запрос.

20

Интервал между PING-фреймами в секундах; 0 отключает.

10

Сколько секунд ждать ответа на PING перед закрытием соединения.

30d

Cache-Control: max-age для статических файлов. Принимает 30s, 5m, 2h, 30d, 1w, 1y, число секунд или off. Заменяет STATIC_CACHE_TTL.

off

Ревалидация по mtime для кэша в памяти — проверяется не чаще одного раза в 3 с на файл. Заменяет STATIC_CACHE.

4

Качество Brotli 0–11. 0 отключает сжатие.

Безопасность

5 переменных
Переменная По умолчанию Описание
DENY

Защита от кликджекинга: DENY, SAMEORIGIN или off. Устанавливает X-Frame-Options + CSP frame-ancestors; заголовки, заданные приложением, всегда имеют приоритет.

(не задано)

CIDR доверенных прокси (или private). Реальный IP клиента берётся из Forwarded / X-Forwarded-* по правилу «крайний справа недоверенный».

(не задано)

Glob-шаблоны, чьи .php-файлы никогда не исполняются по прямому URI (/uploads/**). Сопоставляются до обращения к диску — не раскрывают факт существования файла.

404

Ответ при совпадении с дени-листом: HTTP-статус 400–599 или PHP-скрипт-фолбэк с префиксом / внутри DOCUMENT_ROOT.

(не задано)

Абсолютные пути, внутри которых символические ссылки могут выходить за пределы DOCUMENT_ROOT. Не задано = выход запрещён.

Логи, трассировки и профили

34 переменных
Переменная По умолчанию Описание
info

Детализация логов: trace, debug, info, warn, error.

(не задано)

Лог доступа по каждому запросу: all = каждый запрос, error = только 4xx/5xx, не задано = выключено.

(не задано)

Внутренний сервер (/health, /metrics, /config). Значения только с портом привязываются к 127.0.0.1; не задано = не запускается.

(не задано)

Список разрешений в формате CIDR для внутреннего сервера; посторонние получают 403, проверки работоспособности остаются доступны. Loopback не подразумевается по умолчанию.

(не задано)

Каталог с пользовательскими страницами ошибок {status}.html.

524288

Максимальный размер тела запроса (в байтах) для внутренних эндпоинтов запросов (512 КиБ).

false

Распространение W3C Trace Context: читает traceparent/tracestate и передаёт их в PHP через $_SERVER.

false

Включает экспорт спанов OpenTelemetry. Подразумевает TRACE_CONTEXT=true.

grpc

Протокол экспорта: grpc или http/protobuf.

localhost:4317 / 4318

Эндпоинт OTLP-коллектора.

10000

Таймаут экспорта в миллисекундах.

(не задано)

Заголовки аутентификации: key=value,key2=value2.

oxphp

Имя сервиса в экспортируемых спанах.

(не задано)

Атрибут версии сервиса.

(не задано)

Дополнительные атрибуты ресурса: env=prod,region=us-east-1.

parentbased_traceidratio

Стратегия сэмплирования: always_on, always_off, traceidratio и варианты parentbased_*.

1.0

Доля сэмплирования 0.0–1.0 для сэмплеров на основе доли; значения вне диапазона усекаются до границ.

false

APM: автоматическое инструментирование 33 функций PHP (PDO, mysqli, cURL, Redis…), захват ошибок, SDK трассировки. Требует OTEL_ENABLED.

100

Порог медленного запроса в мс; более медленные запросы к БД получают oxphp.db.slow=true.

false

Записывает привязанные параметры в спаны db.params. Отключите, если параметры могут содержать конфиденциальные данные.

false

Главный переключатель. Остальные переменные PROFILER_* всё равно разбираются, поэтому опечатки проявляются при запуске.

0.0

Вероятность 0.0–1.0 того, что запрос попадёт в выборку.

false

Также сэмплировать запросы к внутреннему серверу.

(не задано)

Bearer-токен, необходимый для профилирования по требованию через oxphp_profiler_*().

50000

Лимит спанов на запрос; более длинные профили усекаются.

256

Максимальная глубина стека вызовов на сэмпл (жёсткий предел 65535).

/tmp/oxphp-profiles

Каталог для профилей на диске.

xhprof,speedscope

Форматы, записываемые на диск: xhprof, speedscope, pprof, flamegraph.

10

Ограничение частоты записи файлов профилей в секунду.

100

Максимум хранимых файлов профилей; более старые удаляются.

(не задано)

Удалённый эндпоинт, куда профили отправляются методом POST.

xhprof

Формат передачи для экспорта.

(не задано)

Bearer-токен, отправляемый с каждым экспортом.

(auto-detect)

XHGui-совместимая упаковка; не задано = автоопределение по URL.

Асинхронность и разделяемое состояние

19 переменных
Переменная По умолчанию Описание
0 (off)

Выделенные потоки асинхронных воркеров. 0 = функции зарегистрированы, но при вызове бросают AsyncException.

ASYNC_WORKERS × 64

Максимум ожидающих задач в асинхронной очереди. 0 = авто.

256

Лимит одновременных файберов задач на воркер; глобальный лимит выполняемых = файберы × воркеры.

true

Главный переключатель всей подсистемы OxPHP\Shared\*.

100000

Глобальный лимит на все записи Shared; вставки сверх него бросают CapacityException.

1 GiB

Глобальный лимит на оценочный объём памяти по всем записям.

0.7

Начинать отбрасывать наименее приоритетную работу после превышения этой доли лимитов.

true

Включает/отключает экспозицию Prometheus oxphp_shared_*.

true

Включает/отключает API интроспекции /__ox_shared/*.

true

Предпросмотр значений в ответах интроспекции; отключите, если предпросмотр может раскрыть данные.

16

Глубина BFS при проверке циклов; увеличьте для глубоких графов.

10000

Число рёбер, обходимых при проверке циклов; увеличьте для плотных графов.

1 MiB

Лимит размера одного значения; вставки большего размера сразу отклоняются.

64 MiB

Лимит суммарной полезной нагрузки на канал.

false

Паника внутри замыкания Mutex/Once навсегда «отравляет» примитив вместо восстановления по возможности.

off

Диагностика конкуренции за блокировки: off, count или trace.

100

Интервал опроса для сэмплера диагностики блокировок.

256

Усечение строк в предпросмотрах /entry.

20

Число элементов, выбираемых в предпросмотрах /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.