HTTPサーバー

http.serviceはリスナーを所有し、ルーター、エンドポイント、静的ファイルハンドラをホストします。

分類:サーバー設定リファレンス。 すべての参照先となるネットワーク、環境、ファイルシステム、ルーター、証明書、アクター、ポリシーの各エントリを定義していないブロックは、レジストリの一部分です。

設定

- name: gateway
  kind: http.service
  addr: ":8080"
  timeouts:
    read: "5s"
    write: "30s"
    idle: "60s"
  host:
    buffer_size: 1024
    worker_count: 4
  lifecycle:
    auto_start: true
    security:
      actor:
        id: "http-gateway"
      policies:
        - app:http_policy
フィールド デフォルト 説明
addr string 必須 待受アドレス(:80800.0.0.0:443
timeouts.read duration - リクエスト読み取りタイムアウト
timeouts.write duration - レスポンス書き込みタイムアウト
timeouts.idle duration - Keep-Alive接続のタイムアウト
host.buffer_size int 1024 メッセージリレーのバッファサイズ
host.worker_count int NumCPU メッセージリレーのワーカー数
network Registry ID - ネットワークオーバーレイ(Tailscale、I2Pなど)を介してリスナーをバインド
tls object - TLS終端(TLSを参照)

タイムアウト

リソースの枯渇を防ぐためにタイムアウトを設定します:

timeouts:
  read: "10s"    # Max time to read the entire request (headers + body)
  write: "60s"   # Max time to write response
  idle: "120s"   # Keep-alive timeout
  • read — APIでは短く(5~10秒)、アップロードでは長く設定
  • write — 想定されるレスポンス生成時間に合わせて設定
  • idle — 接続の再利用とリソース使用量のバランスを取って設定
期間の形式:30s1m2h15m。無効にするには0を使用します。

ホスト設定

hostセクションは、WebSocketリレーなどのコンポーネントが使用する、サーバー内部のメッセージリレーを設定します:

host:
  buffer_size: 2048
  worker_count: 8
フィールド デフォルト 説明
buffer_size 1024 ワーカーごとのメッセージキュー容量
worker_count NumCPU メッセージを並列処理するgoroutine数
高スループットのWebSocketアプリケーションでは、これらの値を増やしてください。メッセージリレーは、HTTPコンポーネントとプロセス間の非同期配信を処理します。

セキュリティ

HTTPサーバーには、ライフサイクル設定を通じてデフォルトのセキュリティコンテキストを適用できます:

lifecycle:
  auto_start: true
  security:
    actor:
      id: "gateway-service"
    policies:
      - app:http_access_policy

これにより、すべてのリクエストに基本となるアクターとポリシーが設定されます。認証されたリクエストでは、token_authミドルウェアが検証済みトークンに基づいてアクターを上書きし、ユーザーごとのセキュリティポリシーを適用できるようにします。

ライフサイクル

サーバーはスーパーバイザーによって管理されます:

lifecycle:
  auto_start: true
  start_timeout: 30s
  stop_timeout: 60s
  requires:
    - app:database
フィールド 説明
auto_start アプリケーション起動時に開始
start_timeout サーバーの起動を待機する最大時間
stop_timeout 正常終了にかけられる最大時間
requires これらのエントリの準備完了後に開始(depends_onは従来の表記)

コンポーネントの接続

ルーターと静的ハンドラは、メタデータを介してサーバーを参照します:

entries:
  - name: gateway
    kind: http.service
    addr: ":8080"

  - name: api
    kind: http.router
    meta:
      server: gateway
    prefix: /api

  - name: static
    kind: http.static
    meta:
      server: gateway
    path: /
    fs: app:public

複数のサーバー

目的ごとに別のサーバーを実行できます:

entries:
  # Public API
  - name: public
    kind: http.service
    addr: ":8080"
    lifecycle:
      auto_start: true

  # Admin (localhost only)
  - name: admin
    kind: http.service
    addr: "127.0.0.1:9090"
    lifecycle:
      auto_start: true

TLS

サーバーはTLSを直接終端できます。独自の証明書を指定する場合はtls.modemanualに、オーバーレイネットワークドライバーから証明書を取得する場合はautonetwork.tailscaleなど)に設定します。通常のクリアネットリスナーではautoを使用できません。平文HTTPで実行するには、tlsを省略するかモードを空のままにします。

autoモードではサーバーはcert/keyを指定してはいけません — ネットワークドライバが提供します。

手動証明書

mode: manualでは、certkeyがPEMコンテンツを保持します。そのコンテンツは次の3つの方法のいずれかで指定します(フィールドごとに1つを選び、混在させないでください):

  1. インラインPEM — PEM文字列そのもの。
  2. file://参照 — マニフェストからの相対パス。読み込み時に解決されインライン化されます(トラバーサル安全)。
  3. 環境レジストリ参照${env:NAME}プレースホルダを使い、デコード時に登録済みの環境変数からPEMを取得します。
- name: api
  kind: http.service
  addr: ":443"
  tls:
    mode: manual
    cert: file://./certs/server.pem
    key:  file://./certs/server.key
- name: api
  kind: http.service
  addr: ":443"
  tls:
    mode: manual
    cert: ${env:app.env:tls_cert}
    key:  ${env:app.env:tls_key}

${env:NAME}プレースホルダは、環境レジストリを通じてNAMEを解決します — 登録済み変数の公開名またはそのエントリID(例: app.env:tls_cert)です。これは生のOS環境変数ではありません。OSの値に到達できるのは、env.storage.osをバックエンドとする変数がその名前で登録されている場合のみです。デフォルト値は${env:NAME|default}で指定できます。

従来のcert_env / key_envの対応フィールドも同じく環境レジストリを通じて解決されますが、非推奨です — 上記の${env:NAME}プレースホルダを使用してください。
フィールド 説明
mode ""(オフ)、auto、またはmanual
cert / key PEMコンテンツ — インライン、file://参照、または${env:NAME}プレースホルダ

相互TLS(mTLS)

mode: manualでは、クライアント証明書も検証できます:

tls:
  mode: manual
  cert: ${env:app.env:tls_cert}
  key:  ${env:app.env:tls_key}
  client_ca: file://./certs/clients-ca.pem
  client_auth: require_and_verify

client_cacert/keyと同じ3つの形式(インラインPEM、file://${env:NAME})を受け付けます。従来のclient_ca_envの対応フィールドも同様に非推奨であり、client_ca: ${env:NAME}を推奨します。

フィールド 説明
client_auth requestrequire_anyverify_if_givenrequire_and_verify
client_ca 信頼するクライアントCAのPEMバンドル(インライン、file://、または${env:NAME}
フィールド 説明
client_auth requestrequire_anyverify_if_givenrequire_and_verifyのいずれか
client_ca 信頼するクライアントCAのPEMバンドル(インライン、file://、または${env:NAME}

verify_if_givenrequire_and_verifyにはCAが必要です。requestrequire_anyは、CA検証なしですべてのクライアント証明書を受け入れます。

関連項目