設定

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)

非同期 I/O スレッド。1 = シングルスレッド、N = 固定数、未設定 = 自動。

sapi

PHP エグゼキューターのバックエンド。sapi は実際の PHP、stub は PHP なしのベンチマーク用。

CPU / 2 (min 1)

ワーカープールのサイズ。N = 固定プール、MIN:MAX = 動的スケーリング、0 = 自動。

30

動的ワーカーが破棄されるまでアイドル状態を維持する秒数。

workers × 128

PHP キューで保留可能なリクエストの最大数。満杯のときは 529 を返します。MIN:MAX プールでは、初期ワーカー数 = 最小値。

(未設定)

リサイクルされるまでのワーカーごとのメモリ上限 (MiB)。0 = 無制限。Worker::scheduleExit() によるオンデマンドのリサイクル。

true

各スクリプトの前に $_GET、$_POST、$_COOKIE、$_FILES、$_SERVER および php://input を設定します。falsy = オブジェクト 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)。Forwarded / X-Forwarded-* から、最も右側の非信頼エントリを用いて実クライアント IP を取得します。

(未設定)

直接 URI では .php ファイルを一切実行しない glob パターン (/uploads/**)。ディスク I/O の前にマッチするため、存在の有無を漏らしません。

404

拒否にマッチしたときのレスポンス。HTTP ステータス 400〜599、または DOCUMENT_ROOT 内の / で始まる PHP フォールバックスクリプト。

(未設定)

シンボリックリンクが DOCUMENT_ROOT の外へ抜け出すことを許可する絶対パス。未設定 = 抜け出しを許可しません。

ログ、トレース、プロファイル

34 変数
変数 デフォルト 説明
info

ログの詳細度。trace、debug、info、warn、error。

(未設定)

リクエストごとのアクセスログ。all = すべてのリクエスト、error = 4xx/5xx のみ、未設定 = 無効。

(未設定)

内部サーバー (/health、/metrics、/config)。ポートのみの値は 127.0.0.1 にバインドします。未設定 = 起動しません。

(未設定)

内部サーバー向けの CIDR 許可リスト。外部からのアクセスは 403 を返し、ヘルスプローブは到達可能なままです。ループバックは暗黙的には含まれません。

(未設定)

カスタムの {status}.html エラーページを置くディレクトリ。

524288

内部クエリエンドポイントのボディの最大バイト数 (512 KiB)。

false

W3C Trace Context の伝播。traceparent/tracestate を読み取り、$_SERVER 経由で PHP に転送します。

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

スロークエリのしきい値 (ミリ秒)。これより遅い DB クエリには oxphp.db.slow=true が付与されます。

false

db.params スパンにバインドパラメータを記録します。パラメータが機微な情報を含む可能性がある場合は無効にしてください。

false

マスタースイッチ。他の PROFILER_* 変数も引き続き解析されるため、タイプミスは起動時に表面化します。

0.0

リクエストがサンプリングされる確率 0.0〜1.0。

false

内部サーバーへのリクエストもサンプリングします。

(未設定)

oxphp_profiler_*() によるオンデマンドプロファイリングに必要な Bearer トークン。

50000

リクエストあたりのスパン数の上限。これを超える長さのプロファイルは切り詰められます。

256

サンプルあたりのコールスタックの最大深さ (ハード上限 65535)。

/tmp/oxphp-profiles

ディスク上のプロファイルを置くディレクトリ。

xhprof,speedscope

ディスクに書き出す形式。xhprof、speedscope、pprof、flamegraph。

10

1 秒あたりに書き込むプロファイルファイル数のレート制限。

100

保持するプロファイルファイルの最大数。古いものは削除されます。

(未設定)

プロファイルを POST するリモートエンドポイント。

xhprof

エクスポートのワイヤーフォーマット。

(未設定)

各エクスポートとともに送信する Bearer トークン。

(auto-detect)

XHGui 互換のラッピング。未設定 = URL から自動検出します。

非同期と共有状態

19 変数
変数 デフォルト 説明
0 (off)

専用の非同期ワーカースレッド。0 = 関数は登録されますが、呼び出すと AsyncException をスローします。

ASYNC_WORKERS × 64

非同期キューで保留可能なタスクの最大数。0 = 自動。

256

ワーカーごとの同時タスクファイバー数の上限。全体の処理中上限 = fibers × workers。

true

OxPHP\Shared\* サブシステム全体のマスタースイッチ。

100000

すべての Shared エントリに対する全体上限。これを超える挿入は CapacityException をスローします。

1 GiB

全エントリにわたる推定メモリの全体上限。

0.7

上限のこの割合を超えると、優先度の最も低い処理から切り捨てを開始します。

true

oxphp_shared_* の Prometheus エクスポジションを切り替えます。

true

/__ox_shared/* イントロスペクション API を切り替えます。

true

イントロスペクションレスポンスでの値のプレビュー。プレビューがデータを漏らす可能性がある場合は無効にしてください。

16

循環チェックの BFS 深さ。深いグラフの場合は上げてください。

10000

循環チェック中にたどるエッジ数。密なグラフの場合は上げてください。

1 MiB

値ごとのサイズ上限。これより大きい挿入は即座に失敗します。

64 MiB

チャネルごとのペイロード合計の上限。

false

Mutex/Once クロージャ内での panic は、ベストエフォートの復旧ではなく、そのプリミティブを恒久的に poison 状態にします。

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.