設定リファレンス
OxPHP はすべて環境変数で設定します。管理すべき設定ファイルは存在せず、すべての設定項目にデフォルト値があるため、設定ゼロのデプロイがそのまま動作します。
ブール値
ブール値として指定された変数は、大文字・小文字を区別せず前後の空白を取り除いたうえで、決まった正規の値の集合を受け付けます。
- 真値:
on,true,1,yes - 偽値:
off,false,0,no
その集合に含まれない空でない値、たとえば ture のようなタイプミスは、起動時に該当する変数名を示すエラーで即座に失敗します。これにより、フラグが誤った向きに静かに切り替わってしまう前に、トラフィックが流れ始める前の段階で設定ミスを検出できます。
未設定の変数や空の代入(FOO=)は、ドキュメントに記載されたデフォルト値にフォールバックします。空を未設定として扱うのは意図的な挙動です。Docker Compose / Kubernetes の FOO=${FOO} のような変数展開は、ホスト側の変数が存在しないときに FOO= を生成しますが、それによってサーバーの起動が拒否されるべきではないからです。
サーバー
| 変数 | デフォルト | 説明 |
|---|---|---|
LISTEN_ADDR |
0.0.0.0:80 |
メイン HTTP サーバーのアドレスとポート |
DOCUMENT_ROOT |
/var/www/html/public |
ファイルと PHP スクリプトを配信するルートディレクトリ |
ENTRY_FILE |
(未設定) | 単一の正規エントリースクリプト。未設定 = 直接ファイルマッピング。*.php = フロントコントローラー。.php 以外 = 静的フォールバック(SPA)。WORKER_MODE_ENABLED=true の場合 = ワーカーのブートストラップ。DOCUMENT_ROOT を基準に解決されます(相対パスと .. は許可、絶対パスはそのまま使用)。ルーティングを参照 |
WORKER_MODE_ENABLED |
false |
永続的なワーカーモードを有効化します。ENTRY_FILE が .php スクリプトを指している必要があります。ブール値 — ブール値を参照 |
MAX_CONNECTIONS |
10000 |
同時 TCP 接続の最大数 |
TOKIO_WORKERS |
CPU / 2(最小 1) | 非同期 I/O スレッド。1 = シングルスレッド、N > 1 = スレッド数固定、未設定 = 自動(CPU / 2、最小 1) |
PHP ワーカー
| 変数 | デフォルト | 説明 |
|---|---|---|
EXECUTOR |
sapi |
PHP エグゼキューターのバックエンド。sapi は PHP の実行、stub は PHP なしでのベンチマーク用 |
PHP_WORKERS |
CPU / 2(最小 1) | ワーカープールのサイズ。N = 固定プール、MIN:MAX = 動的スケーリング、0 = 自動 |
PHP_WORKERS_IDLE_SECONDS |
30 |
動的ワーカーが破棄されるまでアイドル状態を保つ秒数(動的モードのみ) |
QUEUE_CAPACITY |
初期ワーカー数 × 128 | PHP キューで保留できるリクエストの最大数。満杯のときは 529 を返します。動的プール(MIN:MAX)の場合、初期ワーカー数 = 最小値 |
静的ワーカーと動的ワーカー
固定プールにするには、PHP_WORKERS に単一の数値を設定します。
PHP_WORKERS=8 # Fixed 8 workers
PHP_WORKERS=0 # Auto-detect: CPU / 2 (min 1)自動スケーリングにするには、PHP_WORKERS に MIN:MAX を設定します。
PHP_WORKERS=2:16 # Scale between 2 and 16 workers
PHP_WORKERS=4:0 # 4 minimum, auto-detect maximum (CPU × 2)
PHP_WORKERS=0:16 # auto-detect minimum (CPU / 4, min 1), 16 maximum動的モードでは、OxPHP はすべてのワーカーがビジー状態のときにワーカーをスケールアップし、ワーカーが PHP_WORKERS_IDLE_SECONDS より長くアイドル状態だったときにスケールダウンします。
ワーカーモード
| 変数 | デフォルト | 説明 |
|---|---|---|
WORKER_MAX_MEMORY_MIB |
0 |
ワーカーがリサイクルされるまでの、ワーカーごとの最大メモリ(MiB)。0 = 無制限 |
WORKER_MODE_ENABLED=true を設定し、ENTRY_FILE をワーカーのブートストラップスクリプト(例: ENTRY_FILE=worker.php や ENTRY_FILE=../worker.php)に向けます。すると PHP プロセスはリクエストをまたいで生き続け、ブートストラップの状態(オートローダー、データベース接続)をメモリ上に保持します。ワーカーは WORKER_MAX_MEMORY_MIB を超えると自動的にリサイクルされ、またアプリケーションが Worker::scheduleExit() を呼び出したときにはオンデマンドでリサイクルされます。以前のリリースにあった WORKER_MAX_REQUESTS のつまみは非推奨となり無視されます。どちらも設定しないか、Worker::scheduleExit() へ移行してください。
非推奨: INDEX_FILE と WORKER_FILE
レガシーの INDEX_FILE と WORKER_FILE 変数は、後方互換性のために今も解析されます。設定されると起動時に WARN ログ行を出力し、新しいモデルへマッピングされます。
| レガシー | 現在の同等設定 |
|---|---|
INDEX_FILE=index.php |
ENTRY_FILE=index.php |
INDEX_FILE=index.html |
ENTRY_FILE=index.html |
WORKER_FILE=/path/worker.php |
WORKER_MODE_ENABLED=true ENTRY_FILE=/path/worker.php |
古い設定と新しい設定の両方が指定された場合は、ENTRY_FILE / WORKER_MODE_ENABLED が優先されます。移行はご都合のよいタイミングで行ってください。非推奨の形式は将来のリリースで削除される予定です。
SAPI / PHP
| 変数 | デフォルト | 説明 |
|---|---|---|
SUPERGLOBALS_ENABLED |
true |
スクリプトの実行前に PHP のスーパーグローバル($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, php://input)を設定します。偽値を設定すると、この設定処理をスキップします — その場合、リクエストデータはオブジェクト API(oxphp_http_request())経由でのみ利用できます。オブジェクト API を直接利用し、リクエストごとにスーパーグローバルを構築するコストを避けたいアプリケーションに便利です |
タイムアウト
| 変数 | デフォルト | 説明 |
|---|---|---|
HEADER_TIMEOUT_SECONDS |
5 |
接続後に HTTP ヘッダーを受信するまでの最大秒数(Slowloris 対策) |
DRAIN_TIMEOUT_SECONDS |
25 |
グレースフルシャットダウン中に処理中の接続を待つ最大秒数 |
PHP の実行時間は、OxPHP の環境変数ではなく、PHP 自身の max_execution_time ini ディレクティブ(および実行時の set_time_limit())によって制限されます。
レート制限
| 変数 | デフォルト | 説明 |
|---|---|---|
RATE_LIMIT |
0(オフ) |
時間ウィンドウあたり、IP ごとの最大リクエスト数。0 はレート制限を無効化します |
RATE_WINDOW_SECONDS |
60 |
レート制限のウィンドウ長(秒) |
セキュリティ
| 変数 | デフォルト | 説明 |
|---|---|---|
FRAME_OPTIONS |
DENY |
クリックジャッキング対策。DENY はすべてのフレーム化をブロック、SAMEORIGIN は同一オリジンのフレーム化を許可、off は無効化(フレーム化を独自の CSP で管理する場合に使用)。X-Frame-Options と Content-Security-Policy: frame-ancestors の両方を設定します。サーバーのセキュリティヘッダーはフォールバックです。アプリケーション(例: PHP の header())が設定した値が優先され、決して上書きされません。フレーム化に関するこの 2 つのヘッダーは双方向にリンクしています — アプリケーションが設定した X-Frame-Options はサーバーの Content-Security-Policy: frame-ancestors を抑制し(最新のブラウザでは CSP が X-Frame-Options より優先されます)、frame-ancestors ディレクティブを含むアプリケーション CSP はサーバーの X-Frame-Options を抑制します。この優先順位は X-Content-Type-Options にも適用される点に注意してください。アプリケーションが設定した値は、nosniff が唯一の有効な値であるにもかかわらずそのまま保持されます — 無効な値を設定すると、この保護は無効になります |
TRUSTED_PROXIES |
(未設定) | 信頼済みリバースプロキシのネットワーク(カンマ区切りの CIDR、または private)。設定すると、OxPHP は Forwarded(RFC 7239)または X-Forwarded-For ヘッダーから、最も右側の非信頼アドレスを採用するアルゴリズムで実際のクライアント IP を抽出します。また X-Forwarded-Proto と X-Forwarded-Host を処理して $_SERVER['HTTPS']、REQUEST_SCHEME、SERVER_NAME、SERVER_PORT に反映します。未設定 = 機能は無効 |
PHP_DENY_PATHS |
(未設定) | .php ファイルを直接 URI 経由で決して実行してはならない、カンマ区切りの glob パターン(例: /uploads/**,/cache/**,/admin/legacy.php)。パターンはディレクトリ全体または単一のファイルを対象にできます。直接マッピングのモード(Traditional と SPA)で適用されます。Framework と Worker モードでは、任意の .php ファイルを直接実行することがないため、起動時に警告を出して無視されます。ディレクトリインデックスの解決(/uploads/ → uploads/index.php)を通じて到達するスクリプトもカバーします。直接の .php URI については、マッチングがディスク I/O の前に行われるため、拒否されたパスはファイルの有無にかかわらず同じレスポンスを返します(存在を推測できるオラクルになりません)。レガシー名の PHP_DENY_DIRS は非推奨のエイリアスとして受け付けられ、起動時に WARN を出力します。PHP 実行拒否リストを参照 |
PHP_DENY_FALLBACK |
404 |
PHP_DENY_PATHS にマッチしたときに返す内容。400–599 の HTTP ステータス(ERROR_PAGES_DIR と組み合わせてカスタム HTML を返す)、または DOCUMENT_ROOT 内の PHP フォールバックスクリプトを指す / で始まる URI パスのいずれか。フォールバックスクリプトは $_SERVER で OXPHP_DENIED_PATH と OXPHP_DENIED_PATTERN を受け取ります。起動時に検証されます。スクリプトは存在し、DOCUMENT_ROOT 内に正規化され、かつそれ自身が PHP_DENY_PATHS にマッチしてはなりません(ループ防止) |
SYMLINK_ALLOW_PATHS |
(未設定) | シンボリックリンクが DOCUMENT_ROOT の外へ抜け出すことを許可する、カンマ区切りの絶対パスのリスト。各項目はディスク上にすでに存在している必要があります。相対パスや存在しないパスは起動を中止させます。未設定 = シンボリックリンクの抜け出しは一切許可しません。シンボリックリンク許可パスを参照 |
特殊値 private は、すべての RFC-1918 プライベートネットワーク、ループバック、およびリンクローカルアドレス(IPv4 と IPv6)に展開されます: 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、127.0.0.0/8、169.254.0.0/16、::1/128、fc00::/7、fe80::/10。
TLS
| 変数 | デフォルト | 説明 |
|---|---|---|
TLS_CERT |
(未設定) | PEM 形式でエンコードされた TLS 証明書のパス。TLS を有効化するには TLS_CERT と TLS_KEY の両方を設定する必要があります |
TLS_KEY |
(未設定) | PEM 形式でエンコードされた TLS 秘密鍵のパス |
TLS_MIN_VERSION |
1.2 |
受け付ける最低の TLS プロトコルバージョン: 1.2 または 1.3。TLS が有効でない場合でも、起動時に(および oxphp config --check によって)検証されます — 非 UTF-8 バイトを含め、それ以外の値は致命的な起動エラーになります。空の値は未設定として扱われます |
HTTP/2
| 変数 | デフォルト | 説明 |
|---|---|---|
H2_MAX_CONCURRENT_STREAMS |
PHP_WORKERS_MAX × 4(最小 32) |
HTTP/2 接続あたりで同時に開けるストリームの最大数 |
H2_MAX_PENDING_RESET |
20 |
接続が閉じられるまでにキューへ積まれる RST_STREAM フレームの最大数(Rapid Reset 対策) |
H2_MAX_HEADER_LIST_BYTES |
65536 |
リクエストあたりのデコード後ヘッダーの最大合計バイト数 |
H2_KEEPALIVE_INTERVAL_SECS |
20 |
HTTP/2 PING フレームの間隔(秒)。0 で無効化 |
H2_KEEPALIVE_TIMEOUT_SECS |
10 |
接続を閉じる前に PING の応答を待つ秒数 |
静的ファイル
| 変数 | デフォルト | 説明 |
|---|---|---|
STATIC_MAX_AGE |
30d |
静的ファイルの Cache-Control: max-age。30s、5m、2h、30d、1w、1y、秒数のみ(3600)、またはヘッダーを無効化する off を受け付けます。非推奨の STATIC_CACHE_TTL を置き換えます。 |
STATIC_REVALIDATE |
off |
ブール値 — ブール値を参照。真値を設定すると、メモリ内のコンテンツキャッシュで mtime による再検証を有効化します。ファイルの更新時刻はファイルごとに(リクエストごとではなく)最大でも 3 秒に 1 回だけ再チェックされ、古いエントリは自動的に破棄されるため、変更は 3 秒以内に反映されます。非推奨の STATIC_CACHE(off が逆の意味だった)を置き換えます。 |
COMPRESSION_LEVEL |
4 |
Brotli 圧縮の品質(0–11)。0 で圧縮を無効化 |
ロギング
| 変数 | デフォルト | 説明 |
|---|---|---|
LOG_LEVEL |
info |
ログの詳細度: trace、debug、info、warn、error |
ACCESS_LOG |
(未設定) | リクエストごとのアクセスログ: all = すべてのリクエスト、error = 4xx/5xx のみ、未設定 = オフ |
ACCESS_LOG は all または error を受け付けます。アクセスログを完全に無効化するには未設定のままにします。
可観測性
| 変数 | デフォルト | 説明 |
|---|---|---|
INTERNAL_ADDR |
(未設定) | 内部サーバー(/health、/metrics、/config)のアドレス。未設定のときは内部サーバーを起動しません。ポートのみの値(:9090 や 9090)は 127.0.0.1 にバインドします。ホスト外へ公開するには、明示的に 0.0.0.0:9090 をバインドしてください |
INTERNAL_ALLOW_IPS |
(未設定) | 内部サーバー向けの、カンマ区切りの CIDR/IP 許可リスト。リスト外のピアは /metrics、/config、およびプラグインパスで 403 を受け取ります。ヘルスプローブ(/health、/healthz、/readyz、/startupz とそれらの長い形式)は引き続きアクセス可能です。未設定/空 = すべて許可。ループバックは暗黙には含まれません — localhost からのアクセスを維持するには 127.0.0.1/32 を列挙してください。不正な形式のリストは起動を中止させます |
ERROR_PAGES_DIR |
(未設定) | {status}.html という名前のカスタムエラーページ(例: 404.html、503.html)を含むディレクトリ |
MAX_QUERY_BODY |
524288 |
内部クエリエンドポイント向けのリクエストボディの最大サイズ(バイト)(512 KiB) |
TRACE_CONTEXT |
false |
ブール値 — ブール値を参照。真値のとき、W3C Trace Context の伝播を有効化します。traceparent/tracestate ヘッダーを読み取り、$_SERVER を介して PHP に転送します |
OpenTelemetry
| 変数 | デフォルト | 説明 |
|---|---|---|
OTEL_ENABLED |
false |
OpenTelemetry のスパンエクスポートを有効化します。自動的に TRACE_CONTEXT=true を設定します。ブール値 — ブール値を参照 |
OTEL_EXPORTER_OTLP_PROTOCOL |
grpc |
エクスポートプロトコル: grpc または http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
http://localhost:4317(gRPC)または http://localhost:4318(HTTP) |
OTLP コレクターのエンドポイント |
OTEL_EXPORTER_OTLP_TIMEOUT |
10000 |
エクスポートのタイムアウト(ミリ秒) |
OTEL_EXPORTER_OTLP_HEADERS |
(未設定) | 認証ヘッダー: key=value,key2=value2 |
OTEL_SERVICE_NAME |
oxphp |
エクスポートされるスパンでのサービス名 |
OTEL_SERVICE_VERSION |
(未設定) | サービスバージョンの属性 |
OTEL_RESOURCE_ATTRIBUTES |
(未設定) | 追加のリソース属性: env=prod,region=us-east-1 |
OTEL_TRACES_SAMPLER |
parentbased_traceidratio |
サンプリング戦略: always_on、always_off、traceidratio、parentbased_always_on、parentbased_always_off、parentbased_traceidratio |
OTEL_TRACES_SAMPLER_ARG |
1.0 |
比率ベースのサンプラー向けのサンプリング比率(0.0–1.0) |
範囲外または不正な OTEL_TRACES_SAMPLER_ARG の値は [0.0, 1.0] にクランプされ、warn レベルでログに記録されます。未知の OTEL_TRACES_SAMPLER の値は parentbased_traceidratio にフォールバックし、ログに記録されます。
APM
| 変数 | デフォルト | 説明 |
|---|---|---|
OTEL_APM_ENABLED |
false |
APM を有効化します: 自動インストルメンテーション、エラーキャプチャ、および PHP トレーシング SDK。OTEL_ENABLED=true が必要です。ブール値 — ブール値を参照 |
OTEL_APM_SLOW_QUERY_MS |
100 |
スロークエリのしきい値(ミリ秒)。これを超えるデータベースクエリには oxphp.db.slow=true スパン属性が付きます |
OTEL_APM_DB_CAPTURE_PARAMS_ENABLED |
false |
バインドパラメータを db.params スパン属性に記録します。パラメータに機密データが含まれる可能性がある場合は、本番環境で無効にしてください。ブール値 — ブール値を参照 |
OTEL_APM_STACKTRACE_MAX_BYTES |
8192 |
exception.stacktrace 属性の最大サイズ(バイト)。上限を超えると、スタックトレースは末尾から切り詰められ …(truncated) マーカーが付きます。0 で切り詰めを無効化 |
OTEL_APM_MESSAGE_MAX_BYTES |
4096 |
exception.message 属性の最大サイズ(バイト)(デフォルトは New Relic の属性ごとの値の上限に合わせています)。上限を超えると、メッセージは末尾から切り詰められ …(truncated) マーカーが付きます。0 で切り詰めを無効化 |
APM が有効なとき、OxPHP は 33 個の内部 PHP 関数(PDO、mysqli、cURL、Redis、Memcached、ファイル I/O)を自動的にフックして子スパンを作成します。oxphp_apm_*() PHP 関数は、APM が有効かどうかにかかわらず登録されます — 無効なときは安全な no-op になります。
非同期ワーカー
| 変数 | デフォルト | 説明 |
|---|---|---|
ASYNC_WORKERS |
0(無効) |
専用の非同期ワーカースレッドの数。0 のとき、非同期関数(oxphp_async など)は登録されますが、呼び出すと OxPHP\Async\AsyncException をスローします。バックグラウンドタスクの実行を有効にするには正の値を設定します |
ASYNC_QUEUE_CAPACITY |
ASYNC_WORKERS × 64 |
非同期キューで保留できるタスクの最大数。0 = 自動(ワーカー数 × 64) |
ASYNC_MAX_FIBERS |
256 |
ワーカーごとの、同時実行する非同期タスクファイバーの上限。プロセス全体での処理中(キュー待ち + 実行中)の上限は ASYNC_MAX_FIBERS × ASYNC_WORKERS です。これを超えるディスパッチは即座に OxPHP\Async\AsyncException で拒否されるため、ファンアウトの合成がデッドロックすることはありません |
非同期ワーカープールは、PHP からディスパッチされた撃ちっぱなし(fire-and-forget)のバックグラウンドタスクを処理します。これは PHP ワーカープールとは別物で、標準的なリクエスト処理には必要ありません。
これら 3 つの変数のいずれかに不正な形式の値(例: ASYNC_WORKERS=8x)があると起動エラーになります — デフォルトにフォールバックすると、プールが静かに無効化されたり誤設定されたりするおそれがあるためです。ちょうど空の値は未設定として扱われます。
共有状態
プロセス内の並行処理プリミティブ(OxPHP\Shared\Counter、Map、Channel、Mutex、Once、Pool、Atomic、Flag、Registry)。API の概要は共有状態を参照してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
SHARED_ENABLED |
true |
ブール値 — ブール値を参照。OxPHP\Shared\* サブシステム全体のマスタースイッチ |
SHARED_MAX_ENTRIES |
100000 |
すべての Shared エントリを合わせたグローバルな上限。これを超える挿入は CapacityException で失敗します |
SHARED_MAX_BYTES |
1073741824(1 GiB) |
すべての Shared エントリにわたる推定メモリのグローバルな上限 |
SHARED_SOFT_LIMIT_RATIO |
0.7 |
使用量が SHARED_MAX_BYTES / SHARED_MAX_ENTRIES のこの割合を超えたときに、最も優先度の低い処理から切り捨てを開始します |
SHARED_METRICS_ENABLED |
true |
ブール値。oxphp_shared_* の Prometheus エクスポジションを切り替えます |
SHARED_INTROSPECTION_ENABLED |
true |
ブール値。内部サーバー上の /__ox_shared/* イントロスペクション API を切り替えます |
SHARED_INTROSPECTION_PREVIEW_ENABLED |
true |
ブール値。イントロスペクションのレスポンスでの値のプレビューを切り替えます(プレビューが機密データを漏らすおそれがある場合は無効にします) |
SHARED_CYCLE_DETECT_DEPTH |
16 |
循環チェック時の BFS の深さ。正当に深いグラフの場合は引き上げてください |
SHARED_CYCLE_DETECT_EDGES |
10000 |
循環チェック時に走査するエッジ数。正当に密なグラフの場合は引き上げてください |
SHARED_MAX_VALUE_SIZE |
1048576(1 MiB) |
値ごとのサイズ上限。これより大きい値の挿入は即座に失敗します |
SHARED_MAX_CHANNEL_BYTES |
67108864(64 MiB) |
チャネルごとの合計ペイロード上限 |
SHARED_POISON_STRICT |
false |
ブール値。真値のとき、Mutex/Once のクロージャ内でのパニックは、可能な限りの回復を試みる代わりに、プリミティブを恒久的に汚染(poison)します |
SHARED_LOCK_DIAGNOSTICS |
off |
ロック競合の診断: off、count、または trace |
SHARED_LOCK_POLL_INTERVAL_MS |
100 |
ロック診断のサンプラーが使用するポーリング間隔 |
SHARED_PREVIEW_STRING_LIMIT |
256 |
/entry?id=… プレビューでの文字列ごとの切り詰め |
SHARED_PREVIEW_ARRAY_LIMIT |
20 |
/entry?id=… プレビューでサンプリングするエントリ数 |
プロファイリング
xhprof / speedscope のトレースを出力するサンプリングプロファイラー。出力形式とビューアー連携についてはプロファイリングを参照してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
PROFILER_ENABLED |
false |
ブール値 — ブール値を参照。マスタースイッチ。他のすべての PROFILER_* 変数も起動時に解析されるため、タイプミスは即座に表面化します |
PROFILER_SAMPLE_RATE |
0.0 |
リクエストがサンプリングされる確率(0.0–1.0)。範囲外の値はクランプされます |
PROFILER_INTERNAL |
false |
ブール値。真値のとき、内部サーバー(/health、/metrics、プラグインエンドポイント)へのリクエストもサンプリングの対象になります |
PROFILER_AUTH_TOKEN |
(未設定) | オプションのベアラートークン。設定すると、oxphp_profiler_* PHP 関数はオンデマンドプロファイリングを有効にするために、このトークンを持つリクエストを要求します |
PROFILER_MAX_SPANS |
50000 |
リクエストごとのプロファイルスパンの上限。上限を超えるプロファイルは切り詰められます |
PROFILER_MAX_DEPTH |
256 |
サンプルごとにキャプチャする最大コールスタック深さ。65535 を上限にハードキャップされます |
PROFILER_OUTPUT_DIR |
/tmp/oxphp-profiles |
ディスク上のプロファイルファイル用のディレクトリ |
PROFILER_OUTPUT_FORMATS |
xhprof,speedscope |
ディスクに書き込む出力形式のカンマ区切りリスト |
PROFILER_DISK_MAX_PER_SEC |
10 |
1 秒あたりにディスクへ書き込むプロファイルファイル数のレート制限 |
PROFILER_RETENTION_COUNT |
100 |
PROFILER_OUTPUT_DIR に保持するプロファイルファイルの最大数。古いファイルは削除されます |
PROFILER_EXPORT_URL |
(未設定) | プロファイルを POST するリモートエンドポイント。設定すると、PROFILER_OUTPUT_FORMATS が空でない限りディスク書き込みも引き続き行われます |
PROFILER_EXPORT_FORMAT |
xhprof |
PROFILER_EXPORT_URL への POST に使うワイヤーフォーマット |
PROFILER_EXPORT_AUTH_TOKEN |
(未設定) | 各エクスポートリクエストとともに送られるオプションのベアラートークン |
PROFILER_EXPORT_XHGUI |
(自動検出) | ブール値。エクスポートペイロードを XHGui 互換でラップするよう強制します。未設定 = PROFILER_EXPORT_URL のパスが /run/import で終わるときに自動検出(ホストやクエリのヒントはマッチ対象外) |
PROFILER_EXPORT_BUGGREGATOR |
(自動検出) | ブール値。Buggregator のエンベロープを強制します。未設定 = PROFILER_EXPORT_URL のパスが /api/profiler/store で終わるときに自動検出。エンベロープは常に xhprof を出力するため、PROFILER_EXPORT_FORMAT はこの場合無視されます(xhprof 以外の値は警告を出しますが致命的ではありません)。PROFILER_EXPORT_XHGUI とは相互排他で、両方を有効にすると起動エラーになります |
PROFILER_EXPORT_APP_NAME |
(未設定) | プロジェクトのグルーピング用の Buggregator の app_name |
PROFILER_EXPORT_TAGS |
(未設定) | key=value,key2=value2 形式の Buggregator の tags。不正な形式のトークン、空のキー、重複するキーは起動エラーになります |
設定例
開発
LISTEN_ADDR=127.0.0.1:8080
DOCUMENT_ROOT=./public
LOG_LEVEL=debug
ACCESS_LOG=all
PHP_WORKERS=1
INTERNAL_ADDR=127.0.0.1:9090本番(Framework)
LISTEN_ADDR=0.0.0.0:80
DOCUMENT_ROOT=/var/www/html/public
ENTRY_FILE=index.php
PHP_WORKERS=8
QUEUE_CAPACITY=1024
LOG_LEVEL=warn
ACCESS_LOG=error
MAX_CONNECTIONS=10000
INTERNAL_ADDR=127.0.0.1:9090
RATE_LIMIT=100
RATE_WINDOW_SECONDS=60
TRUSTED_PROXIES=private
HEADER_TIMEOUT_SECONDS=5
DRAIN_TIMEOUT_SECONDS=25
COMPRESSION_LEVEL=4
STATIC_MAX_AGE=30d本番(ワーカーモード)
LISTEN_ADDR=0.0.0.0:80
DOCUMENT_ROOT=/var/www/html/public
WORKER_MODE_ENABLED=true
ENTRY_FILE=../worker.php
PHP_WORKERS=8
WORKER_MAX_MEMORY_MIB=128
QUEUE_CAPACITY=1024
LOG_LEVEL=warn
ACCESS_LOG=error
INTERNAL_ADDR=127.0.0.1:9090TLS
LISTEN_ADDR=0.0.0.0:443
TLS_CERT=/etc/ssl/oxphp/cert.pem
TLS_KEY=/etc/ssl/oxphp/key.pem
DOCUMENT_ROOT=/var/www/html/public
ENTRY_FILE=index.php稼働中の設定を確認する
内部サーバーが稼働しているとき、/config エンドポイントに問い合わせると、解決済みの設定を確認できます。
curl -s http://localhost:9090/config | jq .{
"listen_addr": "0.0.0.0:80",
"document_root": "/var/www/html/public",
"entry_file": "/var/www/html/public/index.php",
"log_level": "warn",
"executor_type": "sapi",
"php_workers": "8",
"tokio_workers": 4,
"queue_capacity": 1024,
"max_connections": 10000,
"drain_timeout_seconds": 30,
"header_timeout_seconds": 5,
"rate_limit": 100,
"rate_window_seconds": 60,
"tls_enabled": true,
"compression_level": 4,
"access_log": "all",
"max_query_body": 524288,
"worker_mode_enabled": false,
"worker_max_memory_mib": 0,
"static_max_age": 2592000,
"static_revalidate": false,
"async_workers": 0,
"async_queue_capacity": 0,
"async_max_fibers": 256,
"async_in_flight_cap": 0,
"trace_context": true,
"superglobals_enabled": true,
"trusted_proxies": false,
"plugins": {
"otel": {
"enabled": true,
"protocol": "grpc",
"service_name": "oxphp"
},
"apm": {
"enabled": true,
"slow_query_ms": 100,
"db_capture_params": false,
"hooks_registered": 33
}
}
}配信される /config レスポンスは、内部の Config 表現が保持しているいくつかのキーを取り除きます。TLS 証明書と鍵のパスは決して出力されず(tls_enabled が TLS が有効かどうかを示します)、internal_addr と error_pages_dir も削除されます — これらは攻撃者の助けとなり、メトリクススクレイパーには不要な、デプロイのトポロジーとファイルシステムのパスだからです。
関連項目
- ルーティング — ルーティングモードと
ENTRY_FILEの挙動 - ヘルスチェック — 内部サーバーのエンドポイント
- メトリクス — Prometheus 互換のメトリクスリファレンス
- グレースフルシャットダウン —
DRAIN_TIMEOUT_SECONDSがシャットダウンに与える影響 - TLS — TLS のセットアップと証明書の要件
- レート制限 — IP ごとのレート制限の詳細
- ワーカーモード — 永続的な PHP ワーカーのアーキテクチャ
- 圧縮 — Brotli 圧縮の詳細
- 静的ファイル — キャッシュとファイル配信
- 分散トレーシング & APM — OTel エクスポート、自動インストルメンテーション、PHP トレーシング SDK