ドキュメント
a プロジェクト

Caddyfile ディレクティブ

ディレクティブは、サイトのブロック内に記述される機能的なキーワードです。場合によっては、独自のブロックを開いて_サブディレクティブ_を含むことができますが、特に明記されていない限り、ディレクティブは他のディレクティブ内で使用することは**できません**。たとえば、`basicauth`を`file_server`ブロック内で使用することはできません。`file_server`は認証方法を知らないためです。ただし、`handle`や`route`のような特別なディレクティブブロック内では、HTTPハンドラーディレクティブをグループ化するために特別に設計されているため、一部のディレクティブを使用**できます**。

以下のディレクティブはCaddyに標準で付属しており、HTTP Caddyfileで使用できます。

ディレクティブ 説明
abort HTTPリクエストを中止します
acme_server 組み込みACMEサーバー
basicauth HTTPベーシック認証を強制します
bind サーバーのソケットアドレスをカスタマイズします
encode レスポンスをエンコード(通常は圧縮)します
error エラーを発生させます
file_server ディスクからファイルを配信します
forward_auth 認証を外部サービスに委任します
handle 相互排他的なディレクティブのグループ
handle_errors エラー処理のためのルートを定義します
handle_path handleと同様ですが、パスプレフィックスを取り除きます
header レスポンスヘッダーを設定または削除します
import スニペットまたはファイルを含めます
invoke 名前付きルートを呼び出します
log アクセス/リクエストロギングを有効にします
map 入力値を1つ以上の出力にマップします
method HTTPメソッドを内部的に変更します
metrics Prometheusメトリクスエクスポジションエンドポイントを設定します
php_fastcgi FastCGI経由でPHPサイトを配信します
push HTTP/2サーバープッシュを使用してクライアントにコンテンツをプッシュします
redir クライアントにHTTPリダイレクトを発行します
request_body リクエストボディを操作します
request_header リクエストヘッダーを操作します
respond ハードコードされたレスポンスをクライアントに書き込みます
reverse_proxy 強力で拡張可能なリバースプロキシ
rewrite リクエストを内部的に書き換えます
root サイトルートへのパスを設定します
route 単一のユニットとして文字通り扱われるディレクティブのグループ
skip_log 一致するリクエストのアクセスロギングをスキップします
templates レスポンスでテンプレートを実行します
tls TLS設定をカスタマイズします
tracing OpenTelemetryトレーシングとの統合
try_files ファイルの存在に依存する書き換え
uri URIを操作します
vars 任意の変数を設定します

構文

各ディレクティブの構文は次のようになります。

directive [<matcher>] <args...> {
	subdirective [<args...>]
}

`<山括弧>`は、実際の値に置き換えられるトークンを示します。

`[角括弧]`は、オプションのパラメーターを示します。

省略記号`...`は、継続、つまり1つ以上のパラメーターまたは行を示します。

サブディレクティブは、`[角括弧]`に表示されない場合でも、通常はオプションです。

マッチャー

すべてではありませんが、ほとんどのディレクティブは、リクエストをフィルタリングできるマッチャートークンを受け入れます。マッチャートークンは通常オプションです。ディレクティブの構文に次のような記述がある場合、ディレクティブはマッチャーをサポートします。

[<matcher>]

マッチャートークンはすべて同じように動作するため、重複を避けるために、すべてのページでマッチャートークンのさまざまな可能性については説明しません。代わりに、マッチャードキュメントで構文の詳細な説明を参照してください。

ディレクティブの順序

多くのディレクティブは、HTTPハンドラーチェーンを操作します。これらのディレクティブが評価される順序は重要であるため、デフォルトの順序はCaddyにハードコードされています。

`order`グローバルオプションまたは`route`ディレクティブを使用することで、この順序をオーバーライド/カスタマイズできます。

tracing

map
vars
root
skip_log

header
copy_response_headers # only in reverse_proxy's handle_response block
request_body

redir

# incoming request manipulation
method
rewrite
uri
try_files

# middleware handlers; some wrap responses
basicauth
forward_auth
request_header
encode
push
templates

# special routing & dispatching directives
invoke
handle
handle_path
route

# handlers that typically respond to requests
abort
error
copy_response # only in reverse_proxy's handle_response block
respond
metrics
reverse_proxy
php_fastcgi
file_server
acme_server

ソートアルゴリズム

使いやすさのために、Caddyfileアダプターは次のルールに従ってディレクティブをソートします。

  • 名前が異なるディレクティブは、デフォルトの順序での位置によってソートされます。デフォルトの順序は、`order`グローバルオプションでオーバーライドできます。プラグインのディレクティブには順序がないため、`order`グローバルオプションまたは`route`ディレクティブを使用して順序を設定する必要があります。

  • 同じ名前のディレクティブは、それらのマッチャーに従ってソートされます。

    • 最優先事項は、単一のパス マッチャーを持つディレクティブです。

      パス マッチャーは、最も具体的なものから最も具体的でないものの順に、特異性によってソートされます。

      一般に、これはパス マッチャーの長さでソートすることによって実行されます。1つの例外があり、パスが`*`で終わり、2つのマッチャーのパスがそれ以外は同じである場合、`*`のないマッチャーの方が具体的であると見なされ、上位にソートされます。

      例えば

      • `/foobar`は`/foo`よりも具体的です
      • `/foo`は`/foo*`よりも具体的です
      • `/foo/*`は`/foo*`よりも具体的です
    • 他のマッチャーを持つディレクティブは、Caddyfileに表示される順序で次にソートされます。

      これには、複数の値を持つパス マッチャーと、名前付きマッチャーが含まれます。

    • マッチャーのないディレクティブ(つまり、すべてのリクエストに一致する)は最後にソートされます。

  • `vars`ディレクティブは、互いに上書きされる可能性のある値の設定を伴うため、マッチャーによる順序付けが逆になります。そのため、最も具体的なマッチャーは最後に評価する必要があります。

  • `route`ディレクティブの内容は、上記のすべてのルールを無視し、ディレクティブが表示される順序を保持します。