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.
服务器与工作进程
12 个变量主 HTTP 服务器的地址和端口。
用于提供文件和 PHP 脚本的根目录。
单一规范入口脚本。未设置 = 直接文件映射,*.php = 前端控制器,非 .php = SPA 回退;在工作进程模式下即工作进程引导脚本。相对于 DOCUMENT_ROOT 解析。
启用常驻工作进程模式。要求 ENTRY_FILE 指向一个 .php 脚本。
最大并发 TCP 连接数。
异步 I/O 线程数。1 = 单线程,N = 固定数量,未设置 = 自动。
PHP 执行器后端:sapi 使用真实 PHP,stub 用于不依赖 PHP 的基准测试。
工作进程池大小。N = 固定池,MIN:MAX = 动态伸缩,0 = 自动。
动态工作进程在被回收前保持空闲的秒数。
PHP 队列中最大待处理请求数;队列满时返回 529。对于 MIN:MAX 池,初始工作进程数等于最小值。
每个工作进程在被回收前的内存上限(MiB)。0 = 无限制。通过 Worker::scheduleExit() 按需回收。
在每个脚本运行前填充 $_GET、$_POST、$_COOKIE、$_FILES、$_SERVER 和 php://input。假值 = 仅对象 API(oxphp_http_request())。
流量与传输
15 个变量连接建立后接收 HTTP 请求头的最长秒数(Slowloris 防护)。
优雅关闭期间等待处理中连接完成的最长秒数。
每个 IP 在每个时间窗口内的最大请求数。0 = 关闭;PHP 队列满时返回 529。
限流时间窗口的时长(秒)。
PEM 证书的路径。必须同时设置 TLS_CERT 和 TLS_KEY 才能启用 TLS。
PEM 私钥的路径。
最低 TLS 版本:1.2 或 1.3。即使 TLS 已关闭,也会在启动时校验。
每个连接同时打开的最大流数量。
连接被关闭前排队的最大 RST_STREAM 帧数(Rapid Reset 防护)。
每个请求解码后请求头的最大总字节数。
PING 帧之间的间隔秒数;0 表示禁用。
关闭连接前等待 PING 响应的秒数。
静态文件的 Cache-Control: max-age。接受 30s、5m、2h、30d、1w、1y、纯秒数或 off。替代 STATIC_CACHE_TTL。
内存缓存的 mtime 重新校验——每个文件最多每 3 秒检查一次。替代 STATIC_CACHE。
Brotli 压缩质量 0–11。0 表示禁用压缩。
安全
5 个变量点击劫持防护:DENY、SAMEORIGIN 或 off。设置 X-Frame-Options 和 CSP frame-ancestors;应用自行设置的响应头始终优先。
可信代理的 CIDR(或 private)。真实客户端 IP 通过“最右侧的非可信项”从 Forwarded / X-Forwarded-* 中提取。
其下的 .php 文件永不通过直接 URI 执行的 glob 模式(/uploads/**)。在磁盘 I/O 之前匹配——不会泄露文件是否存在。
命中拒绝规则时的响应:一个 400–599 的 HTTP 状态码,或 DOCUMENT_ROOT 内以 / 开头的 PHP 回退脚本。
允许符号链接逃逸出 DOCUMENT_ROOT 的绝对路径。未设置 = 不允许任何逃逸。
日志、追踪与性能剖析
34 个变量日志详细程度:trace、debug、info、warn、error。
按请求记录的访问日志:all = 每个请求,error = 仅 4xx/5xx,未设置 = 关闭。
内部服务器(/health、/metrics、/config)。仅指定端口时绑定到 127.0.0.1;未设置 = 不启动。
内部服务器的 CIDR 允许列表;列表外的来源返回 403,健康探测仍可访问。回环地址不会被隐式允许。
存放自定义 {status}.html 错误页面的目录。
内部查询端点的最大请求体字节数(512 KiB)。
W3C Trace Context 传播:读取 traceparent/tracestate 并通过 $_SERVER 转发给 PHP。
启用 OpenTelemetry span 导出。隐含 TRACE_CONTEXT=true。
导出协议:grpc 或 http/protobuf。
OTLP 采集器端点。
导出超时时间(毫秒)。
认证请求头:key=value,key2=value2。
导出 span 中的服务名称。
服务版本属性。
额外的资源属性:env=prod,region=us-east-1。
采样策略:always_on、always_off、traceidratio 以及各 parentbased_* 变体。
基于比例的采样器的采样率 0.0–1.0;超出范围的值会被钳制。
APM:自动埋点 33 个 PHP 函数(PDO、mysqli、cURL、Redis……)、错误捕获、追踪 SDK。要求 OTEL_ENABLED。
慢查询阈值(毫秒);更慢的数据库查询会被标记为 oxphp.db.slow=true。
在 db.params span 中记录绑定参数。若参数可能敏感,请禁用。
总开关。其他 PROFILER_* 变量仍会被解析,因此拼写错误会在启动时暴露。
请求被采样的概率 0.0–1.0。
同时对内部服务器的请求进行采样。
通过 oxphp_profiler_*() 进行按需性能分析所需的 Bearer 令牌。
每个请求的 span 上限;超出的剖析数据会被截断。
每次采样的最大调用栈深度(硬上限 65535)。
磁盘上剖析文件的存放目录。
写入磁盘的格式:xhprof、speedscope、pprof、flamegraph。
每秒写入剖析文件数量的限流。
保留的最大剖析文件数量;较旧的会被清理。
用于 POST 上传剖析数据的远程端点。
导出时使用的传输格式。
每次导出时发送的 Bearer 令牌。
XHGui 兼容的封装;未设置 = 根据 URL 自动检测。
异步与共享状态
19 个变量专用的异步工作线程。0 = 函数已注册但调用时抛出 AsyncException。
异步队列中最大待处理任务数。0 = 自动。
每个工作线程并发任务纤程的上限;全局处理中上限 = 纤程数 × 工作线程数。
整个 OxPHP\Shared\* 子系统的总开关。
所有 Shared 条目的全局上限;超出后的插入会抛出 CapacityException。
所有条目估算内存的全局上限。
超过上限的这一比例后,开始丢弃优先级最低的工作。
开关 oxphp_shared_* 的 Prometheus 指标暴露。
开关 /__ox_shared/* 自省 API。
自省响应中的值预览;若预览可能泄露数据,请禁用。
环检测的 BFS 深度;对于较深的图可调高。
环检测期间遍历的边数;对于较稠密的图可调高。
单个值的大小上限;更大的插入会快速失败。
单个通道的总负载上限。
Mutex/Once 闭包内发生 panic 时会永久毒化该原语,而不是尽力恢复。
锁竞争诊断:off、count 或 trace。
锁诊断采样器的轮询间隔。
/entry 预览中单个字符串的截断长度。
/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.