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`ディレクティブの内容は、上記のすべてのルールを無視し、ディレクティブが表示される順序を保持します。