設定

すべての設定は環境変数ひとつ

すべての設定は環境変数で、ほかにはパス拒否ルール用の任意のファイル .oxphpdeny がひとつあるだけです。どの変数にも本番環境で通用するデフォルト値が用意されています。まずは空の環境でデプロイし、本当に必要な変数だけを上書きしてください。

真偽値
真 on true 1 yes 偽 off false 0 no

この集合に含まれない値は — 「ture」のような打ち間違いも — 起動時に変数名を示して即座に失敗します。空は未設定と同じ扱いです。FOO=${FOO} の置換結果が FOO= になった場合は、起動を拒否せずデフォルト値が使われます。

サーバーとワーカー

15 変数
変数 デフォルト 説明
0.0.0.0:80

メインの HTTP サーバーのアドレスとポート。

/var/www/html/public

ファイルおよび PHP スクリプトを配信するルートディレクトリ。

(未設定)

唯一の正規エントリースクリプト。未設定 = 直接的なファイルマッピング、*.php = フロントコントローラー、非 .php = SPA フォールバック。ワーカーモードでは — ワーカーのブートストラップ。DOCUMENT_ROOT を基準に解決されます。

false

永続的なワーカーモードを有効にします。ENTRY_FILE が .php スクリプトを指している必要があります。

10000

同時 TCP 接続の最大数。デフォルトの QUEUE_MAX_WAITING の上限 (その半分) でもあり、不正な形式の値は起動エラーになります。PHP_WORKERS + QUEUE_CAPACITY + QUEUE_MAX_WAITING より大きく保ってください。

CPU / 2 (min 1)

非同期 I/O スレッド。1 = シングルスレッド、N = 固定数、未設定 = 自動。コアを PHP_WORKERS と共有するため、全コア数まで上げると通常はスループットが落ちます。CPU はプロセスが実行できるコア数 (アフィニティマスク。cgroup クォータがあればその値まで引き下げ) を数えるもので、CPU の重みや、プラットフォームがコンテナの外で課す制限ではありません。何が数えられたかは、起動時の CPU count for default sizing の行で確認できます。

sapi

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

CPU / 2 (min 1)

ワーカープールのサイズ。N = 固定プール、MIN:MAX = 動的スケーリング、0 = 自動。自動サイジングは TOKIO_WORKERS と同じ方法で CPU を数えます — コンテナから CPU 制限が見えないプラン (起動ログに cpu_source: host) では、両方を明示的に設定してください。

30

動的ワーカーが破棄されるまでアイドル状態を維持する秒数。破棄は処理中のものが何もない瞬間を待つため、処理中のリクエストが途中で切られることはありません。

workers × 128

PHP キューで保留可能なリクエストの最大数。満杯のキューに到着したリクエストは QUEUE_WAIT_TIMEOUT_MS まで待ちます。0 = 自動。MIN:MAX プールでは、初期ワーカー数 = 最小値。

1000

リクエストが 529 になるまでに PHP ワーカーを待てる時間の上限 — キューのスロット待ちとキュー内の待機を 1 つの期限でカバーします。過負荷時はサーバーが自動的に短縮し (最小で 1/64、下限 10 ms)、現在の値は oxphp_admission_wait_budget_us で確認できます。0 = キューが満杯になった瞬間に拒否。

workers × 128, ≤ MAX_CONNECTIONS / 2

キューのスロットを待って待機できるリクエストの最大数。これを超えると即座に 529。各待機者は接続とバッファ済みボディを保持します。0 = 自動。

64 MiB

待機セットが保持できるリクエストボディの最大バイト数。これを超えるボディを持つリクエストは即座に 529 になり、ボディのないリクエストは待機を続けます。0 = 自動。

(未設定)

リサイクルされるまでのワーカーごとのメモリ上限 (MiB)。0 = 無制限。ワーカーは、途中で破綻したリクエストが 3 回連続した場合や、Worker::scheduleExit() によるオンデマンドでもリサイクルされます。

true

各スクリプトの前に $_SERVER と $_GET を構築します。falsy にするとその処理を省略します。$_POST、$_FILES、$_COOKIE、php://input には影響しません。

トラフィックと配信

18 変数
変数 デフォルト 説明
5

接続後に HTTP ヘッダーを受信するまでの最大秒数 (Slowloris 対策)。

25

グレースフルシャットダウン中に処理中のリクエストを待機する最大秒数。残ったリクエストはその後キャンセルされます。ブロッキング呼び出しで止まっているリクエストは、これを超えてプロセスを保持することがあります。

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 (min 32)

接続あたり同時にオープンできるストリームの最大数。

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 を置き換えます。

br,zstd,gzip

提供するコンテンツコーディング。br、zstd、gzip。off/none で圧縮を無効にします。順序は無視されます — キャッシュされた静的ファイルは Brotli を、それ以外は zstd を優先します。

5

Brotli の品質 0〜11。0 で Brotli を取り下げます。COMPRESSION_LEVEL を置き換えます (その 0 は引き続きすべてのコーディングを無効にします)。

6

Zstandard のレベル 0〜19。0 で zstd を取り下げます。範囲外の値は起動を中止します。

6

Gzip のレベル 0〜9。0 で gzip を取り下げます。範囲外の値は起動を中止します。

セキュリティ

5 変数
変数 デフォルト 説明
SAMEORIGIN

クリックジャッキング対策。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 の前にマッチするため、存在の有無を漏らしません。

404

PHP_DENY_PATHS にマッチしたとき、または .oxphpdeny の拒否ルールに該当したときのレスポンス。HTTP ステータス 400〜599、または DOCUMENT_ROOT 内の / で始まる PHP フォールバックスクリプト。ワーカーモードでは、.oxphpdeny の拒否ルールにはステータスコードしか指定できません。

(未設定)

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

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

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

サーバー自身の診断ログの詳細度。trace、debug、info、warn、error。アクセスログはフィルタリングしません。クライアントの切断は debug で記録されます。

(未設定)

リクエストごとのアクセスログ。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 コレクターのエンドポイント。http/protobuf ではベース URL となり、スパンはその配下の /v1/traces に送信されます。

10000

エクスポートのタイムアウト (ミリ秒)。gRPC では、TLS ハンドシェイクを含むコレクターへの接続にも上限を設け、Linux ではデータを受け付けなくなった接続をどれだけ早く閉じるかも決めます。

(未設定)

認証ヘッダー。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。34 個の PHP 関数 (PDO、mysqli、cURL、Redis…) の自動計装、エラー捕捉、トレーシング SDK。OTEL_ENABLED が必要です。無効時も oxphp_apm_trace() はコールバックを実行します。

100

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

false

db.params スパンにバインドパラメータを記録します。生のまま (難読化されずに) 記録されるため、トレースに PII が入り込む可能性があります — それが許容できる場合にのみ有効にしてください。

8192

exception.stacktrace 属性の上限。末尾から切り詰められます。0 = 切り詰めなし。

4096

exception.message 属性の上限 (New Relic の属性ごとの制限)。末尾から切り詰められます。0 = 切り詰めなし。

false

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

0.0

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

false

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

(未設定)

明示的なトリガー (X-OxPHP-Profile ヘッダー、OXPROF Cookie、__oxprof クエリ) が持つ必要のあるシークレットで、/__profiler/* の Bearer トークンでもあります。未設定 = トークンなし。サンプリングと OxPHP\Profile\* 関数はこれをチェックしません。

50000

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

0 (no cap)

記録する呼び出しの最大ネスト深さ。それより深い呼び出しの時間は上限位置の呼び出しに合算されます。32 にクランプされます。

/tmp/oxphp-profiles

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

xhprof,speedscope

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

10

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

100

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

(未設定)

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

xhprof

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

(未設定)

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

(auto-detect)

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

(auto-detect)

Buggregator のエンベロープ (常に xhprof)。未設定 = URL から自動検出します。PROFILER_EXPORT_XHGUI とは排他です。

(未設定)

プロジェクトのグループ化に使う Buggregator の app_name。

(未設定)

Buggregator のタグ。key=value,key2=value2。不正な形式のトークンは起動エラーになります。

非同期と共有状態

18 変数
変数 デフォルト 説明
off

ブロッキングする組み込み関数をファイバーを中断する実装に置き換えるオプトイン機能。カテゴリ: sleep (ネイティブの sleep/usleep)、streams (ブロッキングする tcp:// 読み取りと stream_select)、net (接続、TLS ハンドシェイクと読み取り、バッファの空きを待つ書き込み、unix:// / udp:// / udg:// の読み取り — streams が必要、Linux のみ)。1/true/all = すべてのカテゴリ。インストールされたセットは /config の runtime_hooks に表示されます。

0 (off)

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

ASYNC_WORKERS × 64

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

256

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

true

OxPHP\Shared\* サブシステム全体のマスタースイッチ。無効にするとそのクラスは一切登録されないため、class_exists() でガードしてください。

100000

存在する Shared オブジェクト数の全体上限 (Map のキーは数えません)。これを超えて作成すると CapacityException をスローします。

1 GiB

Shared オブジェクト全体にわたる推定メモリの全体上限。オブジェクトの作成時にのみチェックされます。

true

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

true

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

true

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

16

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

10000

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

1 MiB

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

64 MiB

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

warn

Shared\Mutex のデッドロック検出器。off、warn (循環をログに記録してカウント)、または strict (DeadlockException で循環を断ち切る)。デバッグビルドのデフォルトは strict。

100

デッドロック検出器がスキャンする間隔 (ミリ秒)。

256

プレビューにおける文字列ごとの切り詰め。バイト単位で、文字境界で切られます。

20

/entry プレビューでサンプリングされるエントリ数。

プリセット

設定例

ドキュメントからそのまま使える出発点 — コピーして調整してください。

# 開発中は詳細なログ
LOG_LEVEL=debug
# エラーだけでなく全リクエストを記録
ACCESS_LOG=all
# ワーカー 1 つ — デバッグしやすい
PHP_WORKERS=1
# ローカルの /health, /metrics, /config
INTERNAL_ADDR=127.0.0.1:9090
# 静的ファイルを再起動なしで再読み込み
STATIC_REVALIDATE=on
実行中の設定を確認する

内部サーバーが動作しているとき、/config は解決済みの設定を JSON で返します。TLS のパス、INTERNAL_ADDR、ERROR_PAGES_DIR はレスポンスから取り除かれます。

curl -s http://localhost:9090/config | jq .

設定ゼロも正しい設定です

上記のデフォルト値はすべて、空の環境でもそのまま動くように選ばれています。