file_server
実ファイルシステムと仮想ファイルシステムをサポートする静的ファイルサーバーです。リクエストのURIパスをサイトのルートパスに追加することでファイルパスを形成します。
デフォルトでは、正規URIを強制します。つまり、末尾にスラッシュがないディレクトリへのリクエスト(スラッシュを追加するため)、または末尾にスラッシュがあるファイルへのリクエスト(スラッシュを削除するため)に対してHTTPリダイレクトが発行されます。ただし、内部リライトによってパスの最後の要素(ファイル名)が変更された場合は、リダイレクトは発行されません。
多くの場合、file_serverディレクティブはrootディレクティブと組み合わせて、サイト全体のファイルルートを設定します。このディレクティブには、このハンドラーのみにルートを設定するrootサブディレクティブもあります(推奨されません)。サイトルートはサンドボックスの保証を伴いません。ファイルサーバーはパスコンポーネントからのディレクトリトラバーサルを防ぎますが、ルート内のシンボリックリンクはルート外へのアクセスを許可する可能性があります。
エラーが発生した場合(ファイルが見つからない404、アクセス許可が拒否された403など)、エラールートが呼び出されます。handle_errorsディレクティブを使用してエラールートを定義し、カスタムエラーページを表示します。
構文
file_server [<matcher>] [browse] {
fs <backend...>
root <path>
hide <files...>
index <filenames...>
browse [<template_file>]
precompressed <formats...>
status <status>
disable_canonical_uris
pass_thru
}
-
fs 使用する代替(おそらく仮想)ファイルシステムを指定します。
caddy.fs名前空間のCaddyモジュールはここで使用できます。ルートパス/プレフィックスは、代替ファイルシステムモジュールにも適用されます。デフォルトでは、ローカルディスクが使用されます。 -
root サイトルートへのパスを設定します。
rootディレクティブと似ていますが、このファイルサーバーインスタンスのみに適用され、定義されている他のサイトルートをオーバーライドします。デフォルト:{http.vars.root}または現在の作業ディレクトリ。注:このサブディレクティブは、このハンドラーのルートのみを変更します。try_filesやtemplatesなどの他のディレクティブが同じサイトルートを知るには、代わりにrootディレクティブを使用してください。 -
hide 非表示にするファイルまたはフォルダーのリストです。リクエストされた場合、ファイルサーバーはそれらが存在しないかのように動作します。プレースホルダーとグロブパターンを受け入れます。これらはリクエストパスではなく*ファイルシステム*パスであることに注意してください。つまり、相対パスはサイトルートではなく現在の作業ディレクトリを基準として使用し、すべてのパスは比較前に(可能な場合)絶対形式に変換されます。パス区切り文字のないファイル名またはパターンを指定すると、場所に関わらず一致する名前のすべてのファイルが非表示になります。それ以外の場合、パスプレフィックスの一致が試行され、次にグロブ一致が試行されます。これはCaddyfile設定であるため、アクティブな設定ファイルはデフォルトで追加されます。
-
index インデックスファイルとして検索するファイル名のリストです。デフォルト:
index.html index.txt -
browse インデックスファイルのないディレクトリへのリクエストに対してファイルリストを有効にします。
- <template_file> ディレクトリリストに使用するオプションのカスタムテンプレートファイルです。デフォルトは、コマンド
caddy file-server export-templateを使用して抽出できるテンプレートです。このコマンドは、デフォルトのテンプレートを標準出力に出力します。埋め込みテンプレートは、ソースコードにもあります。参照テンプレートは、標準テンプレートモジュールのアクションも使用できます。
- <template_file> ディレクトリリストに使用するオプションのカスタムテンプレートファイルです。デフォルトは、コマンド
-
precompressed あらかじめ圧縮されたサイドカーファイルを検索するエンコード形式のリストです。引数は、あらかじめ圧縮されたサイドカーファイルを検索するエンコード形式の順序付きリストです。サポートされている形式は、
gzip(.gz)、zstd(.zst)、およびbr(.br)です。すべてのファイル検索は、最初に圧縮されていないファイルの存在を探します。見つかったら、Caddyは、有効になっている各形式のファイル拡張子を持つサイドカーファイルを探します。あらかじめ圧縮されたサイドカーファイルが見つかった場合、Caddyは、適切に設定された
Content-Encodingレスポンスヘッダーを使用して、あらかじめ圧縮されたファイルで応答します。そうでない場合、Caddyは通常どおり圧縮されていないファイルで応答します。encodeディレクティブが有効になっている場合、あらかじめ圧縮されていない場合は、応答をオンザフライで圧縮することがあります。 -
status レスポンスの書き込み時に使用するオプションのステータスコードオーバーライドです。カスタムエラーページでリクエストに応答する場合に特に便利です。3桁のステータスコードを指定できます。例:
404。プレースホルダーがサポートされています。デフォルトでは、書き込まれるステータスコードは通常200、または部分的なコンテンツの場合は206になります。 -
disable_canonical_uris リダイレクトのデフォルトの動作を無効にします(リクエストパスがディレクトリの場合は末尾にスラッシュを追加し、リクエストパスがファイルの場合は末尾のスラッシュを削除します)。デフォルトでは、リクエストパスの最後の要素(ファイル名)が内部リライトを受けた場合、明示的なリライトを暗黙的な動作で上書きしないように、正規化は行われません。
-
pass_thru パススルーモードを有効にします。リクエストされたファイルが見つからない場合、
404エラーをトリガーする(handle_errorsルートを呼び出す)代わりに、ルート内の次のHTTPハンドラーに続行します。実際には、このディレクティブは最後に注文されるため、file_serverに続く他のハンドラーディレクティブを持つrouteブロック内でのみ役立ちます。
例
現在のディレクトリからの静的ファイルサーバー
file_server
ファイルリストを有効にした場合
file_server browse
/staticフォルダー内の静的ファイルのみを提供する
file_server /static/*
file_serverディレクティブは通常、rootディレクティブと組み合わせて、ファイルを提供するルートパスを設定します
example.com {
root * /srv
file_server
}
すべての.gitフォルダーとその内容を非表示にする
file_server {
hide .git
}
クライアントでサポートされている場合(Accept-Encodingヘッダー)、リクエストされたファイルとともにあらかじめ圧縮されたファイルの存在を確認します。そのため、/path/to/fileがリクエストされた場合、/path/to/file.zst、/path/to/file.br、/path/to/file.gzをその順序でチェックし、対応するContent-Encodingで最初に利用可能なファイルを提供します
file_server {
precompressed zstd br gzip
}