Configuration Basics
FluxheimはTOMLを使います。不明なフィールドは拒否されるため、再起動前にスペルミスが失敗します。
基本形
[server]
listen = ["0.0.0.0:8080"]
default_vhost = "site"
[[vhosts]]
name = "site"
hosts = ["example.com"]
multi-tenant 環境では [server.host_routing].strict = true を有効にしてください。host identity がない、または不正な場合は 400、未知の host は default site に到達せず 421 を返します。
設定の整理方法
| 領域 | そこに属するもの |
|---|---|
server | Listeners, global limits, trusted proxy handling, and redirects. |
tls | グローバルTLSバックエンドと互換性ポリシー。 |
cache | Process-wide cache defaults and storage tiers. |
vhosts | Hostnames, routes, web roots, proxy settings, PHP, TLS, and access policy. |
metrics | 運用可視性向けのPrometheusとエクスポートリスナー。 |
ルートの形
[[vhosts.routes]]
name = "app"
path_prefix = "/app/"
methods = ["GET", "HEAD", "POST"]
max_request_body_bytes = "16MiB"
[vhosts.routes.proxy]
upstreams = ["127.0.0.1:3000"]
ルートには1つのマッチャーと1つのアクションがあります。完全一致パス、最長プレフィックス、regex support有効時のregex routes、最後にfallback routeの順で勝ちます。
HTTPレスポンスセキュリティ
HTTPレスポンスセキュリティプロファイルは任意です。まずbaselineを使用してください。クロスオリジン分離は、すべてのスクリプト、フォント、画像、サインイン処理、埋め込みリソースをテストしてから使用してください。
[headers.response.hardening]
profile = "baseline"
| プロファイル | 動作 |
|---|---|
off | 任意のセキュリティ強化ヘッダーを無効のままにします。 |
baseline | 多くのサイトに適した、保守的なブラウザ分離とリソースポリシーの既定値を追加します。 |
cross-origin-isolated | すべての外部依存関係をテスト済みのアプリケーション向けに、厳格なクロスオリジン分離を有効にします。 |
どちらのプロファイルもHSTSやCSPは有効にしません。実際のサイトでテストしたうえで、これらは個別に設定してください。
標準仕様に準拠した応答メタデータ
応答メタデータは既定で無効です。必要な項目だけを有効にしてください。Fluxheimは、キャッシュキー、バックエンドアドレス、DNS名、生のエラー内容を公開せず、実際のキャッシュ結果、プロキシ障害、最終的な応答バイト列から値を生成します。
[headers.response.metadata]
identifier = "edge-gateway"
cache_status = true
proxy_status = true
content_digest = true
repr_digest = true
| 項目 | 通知する内容 |
|---|---|
Cache-Status | RFC 9211に基づき、ヒット、ミス、期限切れ応答の転送、再検証、失効、バイパスなどのキャッシュ結果を示します。 |
Proxy-Status | Fluxheimが生成した障害について、RFC 9209に基づく種類の限られた情報を示します。 |
Content-Digest | 圧縮後の最終的なHTTPメッセージ本文に対するRFC 9530 SHA-256値です。 |
Repr-Digest | Fluxheimが選択された表現全体を保持している場合に限り、SHA-256値を付与します。 |
スナップショットの即時反映とロールバック
認証付きスナップショットでは、検証済みの設定候補を公開して稼働中のルーターを差し替え、通常のルーティング専用構成を再起動せずに元へ戻せます。各リクエストは処理の開始から終了まで同じルーター世代を使います。
- スナップショット保存先には専用の非公開ディレクトリを使用してください。既存の公開範囲が広いディレクトリやファイルシステムのルートは拒否されます。
- バックグラウンドでロードバランサーのヘルスチェックまたは検出サービスが動作している場合は、プロセス更新を使用してください。
- 公開またはロールバック後にスナップショットの整合性を検査し、選択した世代が再起動後も維持されることを確認してください。
安全な習慣
- Run
fluxheim --check-configbefore reloads. - サイトまたはアプリケーション境界ごとに1つの仮想ホストを使います。
- シークレットは公開ドキュメントではなく、ファイル、環境変数、コンテナシークレットに置きます。
- config file と、既に存在するすべての親 directory は信頼できる所有者の管理下に置き、group や他の user が書き込めないようにしてください。
- TLS、listener、stream、UDP、ACME、cache purge、tracing、managed PHP-FPM の process 設定を変更した場合は process を置き換えてください。通常の routing と request-time policy は snapshot reload で更新できます。
- アップロードや高コストのアプリケーションパスにはルート単位の制限を使います。
- adminとmetrics listenersはprivateに保ちます。