すべての設定は環境変数ひとつ
すべての設定は環境変数で、ほかにはパス拒否ルール用の任意のファイル .oxphpdeny がひとつあるだけです。どの変数にも本番環境で通用するデフォルト値が用意されています。まずは空の環境でデプロイし、本当に必要な変数だけを上書きしてください。
この集合に含まれない値は — 「ture」のような打ち間違いも — 起動時に変数名を示して即座に失敗します。空は未設定と同じ扱いです。FOO=${FOO} の置換結果が FOO= になった場合は、起動を拒否せずデフォルト値が使われます。
サーバーとワーカー
15 変数メインの HTTP サーバーのアドレスとポート。
ファイルおよび PHP スクリプトを配信するルートディレクトリ。
唯一の正規エントリースクリプト。未設定 = 直接的なファイルマッピング、*.php = フロントコントローラー、非 .php = SPA フォールバック。ワーカーモードでは — ワーカーのブートストラップ。DOCUMENT_ROOT を基準に解決されます。
永続的なワーカーモードを有効にします。ENTRY_FILE が .php スクリプトを指している必要があります。
同時 TCP 接続の最大数。デフォルトの QUEUE_MAX_WAITING の上限 (その半分) でもあり、不正な形式の値は起動エラーになります。PHP_WORKERS + QUEUE_CAPACITY + QUEUE_MAX_WAITING より大きく保ってください。
非同期 I/O スレッド。1 = シングルスレッド、N = 固定数、未設定 = 自動。コアを PHP_WORKERS と共有するため、全コア数まで上げると通常はスループットが落ちます。CPU はプロセスが実行できるコア数 (アフィニティマスク。cgroup クォータがあればその値まで引き下げ) を数えるもので、CPU の重みや、プラットフォームがコンテナの外で課す制限ではありません。何が数えられたかは、起動時の CPU count for default sizing の行で確認できます。
PHP エグゼキューターのバックエンド。sapi は実際の PHP、stub は PHP なしのベンチマーク用。
ワーカープールのサイズ。N = 固定プール、MIN:MAX = 動的スケーリング、0 = 自動。自動サイジングは TOKIO_WORKERS と同じ方法で CPU を数えます — コンテナから CPU 制限が見えないプラン (起動ログに cpu_source: host) では、両方を明示的に設定してください。
動的ワーカーが破棄されるまでアイドル状態を維持する秒数。破棄は処理中のものが何もない瞬間を待つため、処理中のリクエストが途中で切られることはありません。
PHP キューで保留可能なリクエストの最大数。満杯のキューに到着したリクエストは QUEUE_WAIT_TIMEOUT_MS まで待ちます。0 = 自動。MIN:MAX プールでは、初期ワーカー数 = 最小値。
リクエストが 529 になるまでに PHP ワーカーを待てる時間の上限 — キューのスロット待ちとキュー内の待機を 1 つの期限でカバーします。過負荷時はサーバーが自動的に短縮し (最小で 1/64、下限 10 ms)、現在の値は oxphp_admission_wait_budget_us で確認できます。0 = キューが満杯になった瞬間に拒否。
キューのスロットを待って待機できるリクエストの最大数。これを超えると即座に 529。各待機者は接続とバッファ済みボディを保持します。0 = 自動。
待機セットが保持できるリクエストボディの最大バイト数。これを超えるボディを持つリクエストは即座に 529 になり、ボディのないリクエストは待機を続けます。0 = 自動。
リサイクルされるまでのワーカーごとのメモリ上限 (MiB)。0 = 無制限。ワーカーは、途中で破綻したリクエストが 3 回連続した場合や、Worker::scheduleExit() によるオンデマンドでもリサイクルされます。
各スクリプトの前に $_SERVER と $_GET を構築します。falsy にするとその処理を省略します。$_POST、$_FILES、$_COOKIE、php://input には影響しません。
トラフィックと配信
18 変数接続後に HTTP ヘッダーを受信するまでの最大秒数 (Slowloris 対策)。
グレースフルシャットダウン中に処理中のリクエストを待機する最大秒数。残ったリクエストはその後キャンセルされます。ブロッキング呼び出しで止まっているリクエストは、これを超えてプロセスを保持することがあります。
ウィンドウあたり IP ごとの最大リクエスト数。0 = 無効。PHP キューが満杯のときは 529 を返します。
レート制限のウィンドウの長さ (秒)。
PEM 証明書へのパス。TLS を有効にするには TLS_CERT と TLS_KEY の両方を設定する必要があります。
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 を置き換えます。
提供するコンテンツコーディング。br、zstd、gzip。off/none で圧縮を無効にします。順序は無視されます — キャッシュされた静的ファイルは Brotli を、それ以外は zstd を優先します。
Brotli の品質 0〜11。0 で Brotli を取り下げます。COMPRESSION_LEVEL を置き換えます (その 0 は引き続きすべてのコーディングを無効にします)。
Zstandard のレベル 0〜19。0 で zstd を取り下げます。範囲外の値は起動を中止します。
Gzip のレベル 0〜9。0 で gzip を取り下げます。範囲外の値は起動を中止します。
セキュリティ
5 変数クリックジャッキング対策。SAMEORIGIN、DENY、または off。すべてのレスポンスに X-Frame-Options + CSP frame-ancestors を設定します。アプリケーションが設定したヘッダーが常に優先されます。無効な値は起動時の警告とともに SAMEORIGIN にフォールバックします。
信頼済みプロキシ。CIDR、単独の IP、キーワード private と cloudflare をカンマ区切りで混在させて指定します。Forwarded / X-Forwarded-* から、最も右側の非信頼エントリを用いて実クライアント IP を取得します。cloudflare を指定した場合、リクエストが Cloudflare のエッジを経由してきたときは CF-Connecting-IP から取得します。
直接 URI では .php ファイルを一切実行しない glob パターン (/uploads/**)。ディスク I/O の前にマッチするため、存在の有無を漏らしません。
PHP_DENY_PATHS にマッチしたとき、または .oxphpdeny の拒否ルールに該当したときのレスポンス。HTTP ステータス 400〜599、または DOCUMENT_ROOT 内の / で始まる PHP フォールバックスクリプト。ワーカーモードでは、.oxphpdeny の拒否ルールにはステータスコードしか指定できません。
シンボリックリンクが DOCUMENT_ROOT の外へ抜け出すことを許可する絶対パス。未設定 = 抜け出しを許可しません。
ログ、トレース、プロファイル
39 変数サーバー自身の診断ログの詳細度。trace、debug、info、warn、error。アクセスログはフィルタリングしません。クライアントの切断は debug で記録されます。
リクエストごとのアクセスログ。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 のスパンエクスポートを有効にします。TRACE_CONTEXT=true を暗黙的に含みます。
エクスポートプロトコル。grpc または http/protobuf。
OTLP コレクターのエンドポイント。http/protobuf ではベース URL となり、スパンはその配下の /v1/traces に送信されます。
エクスポートのタイムアウト (ミリ秒)。gRPC では、TLS ハンドシェイクを含むコレクターへの接続にも上限を設け、Linux ではデータを受け付けなくなった接続をどれだけ早く閉じるかも決めます。
認証ヘッダー。key=value,key2=value2。
エクスポートされるスパンでのサービス名。
サービスバージョンの属性。
追加のリソース属性。env=prod,region=us-east-1。
サンプリング戦略。always_on、always_off、traceidratio、および parentbased_* の各バリアント。
比率ベースのサンプラー向けのサンプリング比率 0.0〜1.0。範囲外の値はクランプされます。
APM。34 個の PHP 関数 (PDO、mysqli、cURL、Redis…) の自動計装、エラー捕捉、トレーシング SDK。OTEL_ENABLED が必要です。無効時も oxphp_apm_trace() はコールバックを実行します。
スロークエリのしきい値 (ミリ秒)。これより遅い DB クエリには oxphp.db.slow=true が付与されます。
db.params スパンにバインドパラメータを記録します。生のまま (難読化されずに) 記録されるため、トレースに PII が入り込む可能性があります — それが許容できる場合にのみ有効にしてください。
exception.stacktrace 属性の上限。末尾から切り詰められます。0 = 切り詰めなし。
exception.message 属性の上限 (New Relic の属性ごとの制限)。末尾から切り詰められます。0 = 切り詰めなし。
マスタースイッチ。他の PROFILER_* 変数も引き続き解析されるため、タイプミスは起動時に表面化します。
リクエストがサンプリングされる確率 0.0〜1.0。
内部サーバーへのリクエストもサンプリングします。
明示的なトリガー (X-OxPHP-Profile ヘッダー、OXPROF Cookie、__oxprof クエリ) が持つ必要のあるシークレットで、/__profiler/* の Bearer トークンでもあります。未設定 = トークンなし。サンプリングと OxPHP\Profile\* 関数はこれをチェックしません。
リクエストあたりのスパン数の上限。これを超える長さのプロファイルは切り詰められます。
記録する呼び出しの最大ネスト深さ。それより深い呼び出しの時間は上限位置の呼び出しに合算されます。32 にクランプされます。
ディスク上のプロファイルを置くディレクトリ。
ディスクに書き出す形式。xhprof、speedscope、pprof、flamegraph。
1 秒あたりに書き込むプロファイルファイル数のレート制限。
保持するプロファイルファイルの最大数。古いものは削除されます。
プロファイルを POST するリモートエンドポイント。
エクスポートのワイヤーフォーマット。
各エクスポートとともに送信する Bearer トークン。
XHGui 互換のラッピング。未設定 = URL から自動検出します。
Buggregator のエンベロープ (常に xhprof)。未設定 = URL から自動検出します。PROFILER_EXPORT_XHGUI とは排他です。
プロジェクトのグループ化に使う Buggregator の app_name。
Buggregator のタグ。key=value,key2=value2。不正な形式のトークンは起動エラーになります。
非同期と共有状態
18 変数ブロッキングする組み込み関数をファイバーを中断する実装に置き換えるオプトイン機能。カテゴリ: sleep (ネイティブの sleep/usleep)、streams (ブロッキングする tcp:// 読み取りと stream_select)、net (接続、TLS ハンドシェイクと読み取り、バッファの空きを待つ書き込み、unix:// / udp:// / udg:// の読み取り — streams が必要、Linux のみ)。1/true/all = すべてのカテゴリ。インストールされたセットは /config の runtime_hooks に表示されます。
専用の非同期ワーカースレッド。0 = 関数は登録されますが、呼び出すと AsyncException をスローします。
非同期キューで保留可能なタスクの最大数。0 = 自動。
ワーカーごとの同時タスクファイバー数の上限。全体の処理中上限 = fibers × workers。
OxPHP\Shared\* サブシステム全体のマスタースイッチ。無効にするとそのクラスは一切登録されないため、class_exists() でガードしてください。
存在する Shared オブジェクト数の全体上限 (Map のキーは数えません)。これを超えて作成すると CapacityException をスローします。
Shared オブジェクト全体にわたる推定メモリの全体上限。オブジェクトの作成時にのみチェックされます。
oxphp_shared_* の Prometheus エクスポジションを切り替えます。
/__ox_shared/* イントロスペクション API を切り替えます。
イントロスペクションレスポンスでの値のプレビュー。プレビューがデータを漏らす可能性がある場合は無効にしてください。
循環チェックの BFS 深さ。深いグラフの場合は上げてください。
循環チェック中にたどるエッジ数。密なグラフの場合は上げてください。
値ごとのサイズ上限。これより大きい挿入は即座に失敗します。
チャネルごとのペイロード合計の上限。
Shared\Mutex のデッドロック検出器。off、warn (循環をログに記録してカウント)、または strict (DeadlockException で循環を断ち切る)。デバッグビルドのデフォルトは strict。
デッドロック検出器がスキャンする間隔 (ミリ秒)。
プレビューにおける文字列ごとの切り詰め。バイト単位で、文字境界で切られます。
/entry プレビューでサンプリングされるエントリ数。
設定例
ドキュメントからそのまま使える出発点 — コピーして調整してください。
内部サーバーが動作しているとき、/config は解決済みの設定を JSON で返します。TLS のパス、INTERNAL_ADDR、ERROR_PAGES_DIR はレスポンスから取り除かれます。
設定ゼロも正しい設定です
上記のデフォルト値はすべて、空の環境でもそのまま動くように選ばれています。