設定リファレンス

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 に単一の数値を設定します。

bash
PHP_WORKERS=8 # Fixed 8 workers PHP_WORKERS=0 # Auto-detect: CPU / 2 (min 1)

自動スケーリングにするには、PHP_WORKERSMIN:MAX を設定します。

bash
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.phpENTRY_FILE=../worker.php)に向けます。すると PHP プロセスはリクエストをまたいで生き続け、ブートストラップの状態(オートローダー、データベース接続)をメモリ上に保持します。ワーカーは WORKER_MAX_MEMORY_MIB を超えると自動的にリサイクルされ、またアプリケーションが Worker::scheduleExit() を呼び出したときにはオンデマンドでリサイクルされます。以前のリリースにあった WORKER_MAX_REQUESTS のつまみは非推奨となり無視されます。どちらも設定しないか、Worker::scheduleExit() へ移行してください。

非推奨: INDEX_FILEWORKER_FILE

レガシーの INDEX_FILEWORKER_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-OptionsContent-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-ProtoX-Forwarded-Host を処理して $_SERVER['HTTPS']REQUEST_SCHEMESERVER_NAMESERVER_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 にマッチしたときに返す内容。400599 の HTTP ステータス(ERROR_PAGES_DIR と組み合わせてカスタム HTML を返す)、または DOCUMENT_ROOT 内の PHP フォールバックスクリプトを指す / で始まる URI パスのいずれか。フォールバックスクリプトは $_SERVEROXPHP_DENIED_PATHOXPHP_DENIED_PATTERN を受け取ります。起動時に検証されます。スクリプトは存在し、DOCUMENT_ROOT 内に正規化され、かつそれ自身が PHP_DENY_PATHS にマッチしてはなりません(ループ防止)
SYMLINK_ALLOW_PATHS (未設定) シンボリックリンクが DOCUMENT_ROOT の外へ抜け出すことを許可する、カンマ区切りの絶対パスのリスト。各項目はディスク上にすでに存在している必要があります。相対パスや存在しないパスは起動を中止させます。未設定 = シンボリックリンクの抜け出しは一切許可しません。シンボリックリンク許可パスを参照

特殊値 private は、すべての RFC-1918 プライベートネットワーク、ループバック、およびリンクローカルアドレス(IPv4 と IPv6)に展開されます: 10.0.0.0/8172.16.0.0/12192.168.0.0/16127.0.0.0/8169.254.0.0/16::1/128fc00::/7fe80::/10

TLS

変数 デフォルト 説明
TLS_CERT (未設定) PEM 形式でエンコードされた TLS 証明書のパス。TLS を有効化するには TLS_CERTTLS_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-age30s5m2h30d1w1y、秒数のみ(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 ログの詳細度: tracedebuginfowarnerror
ACCESS_LOG (未設定) リクエストごとのアクセスログ: all = すべてのリクエスト、error = 4xx/5xx のみ、未設定 = オフ
Note

ACCESS_LOGall または error を受け付けます。アクセスログを完全に無効化するには未設定のままにします。

可観測性

変数 デフォルト 説明
INTERNAL_ADDR (未設定) 内部サーバー(/health/metrics/config)のアドレス。未設定のときは内部サーバーを起動しません。ポートのみの値(:90909090)は 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.html503.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_onalways_offtraceidratioparentbased_always_onparentbased_always_offparentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG 1.0 比率ベースのサンプラー向けのサンプリング比率(0.0–1.0)
Note

範囲外または不正な 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\CounterMapChannelMutexOncePoolAtomicFlagRegistry)。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 ロック競合の診断: offcount、または 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。不正な形式のトークン、空のキー、重複するキーは起動エラーになります

設定例

開発

bash
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)

bash
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

本番(ワーカーモード)

bash
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:9090

TLS

bash
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 エンドポイントに問い合わせると、解決済みの設定を確認できます。

bash
curl -s http://localhost:9090/config | jq .
json
{ "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 } } }
Note

配信される /config レスポンスは、内部の Config 表現が保持しているいくつかのキーを取り除きます。TLS 証明書と鍵のパスは決して出力されず(tls_enabled が TLS が有効かどうかを示します)、internal_addrerror_pages_dir も削除されます — これらは攻撃者の助けとなり、メトリクススクレイパーには不要な、デプロイのトポロジーとファイルシステムのパスだからです。

関連項目