Caddyfile チュートリアル
このチュートリアルでは、HTTP Caddyfile の基本を学び、見栄えがよく機能的なサイト設定を迅速かつ簡単に作成できるようにします。
目標
- 🔲 最初のサイト
- 🔲 静的ファイルサーバー
- 🔲 テンプレート
- 🔲 圧縮
- 🔲 複数のサイト
- 🔲 マッチャー
- 🔲 環境変数
- 🔲 コメント
前提条件
- 基本的なターミナル/コマンドラインスキル
- 基本的なテキストエディタースキル
- PATH に
caddy
が設定されていること
Caddyfile
という名前の新しいテキストファイルを作成します(拡張子は不要です)。
最初に記述する必要があるのは、サイトのアドレスです。
localhost
次に Enter キーを押して、実行したい内容を入力します。このチュートリアルでは、Caddyfile を次のようにします。
localhost
respond "Hello, world!"
保存して Caddy を実行します(これはトレーニングチュートリアルなので、--watch
フラグを使用して、Caddyfile の変更が自動的に適用されます)。
caddy run --watch
初めて実行するときは、パスワードの入力を求められます。これは、Caddy が HTTPS 経由でサイトを提供できるようにするためです。
ブラウザで localhost を開き、HTTPS を使用して動作する Web サーバーを確認してください。
これはそれほど面白くないので、静的応答をディレクトリ一覧表示が有効になっているファイルサーバーに変更しましょう。
localhost
file_server browse
Caddyfile を保存して、ブラウザのタブを更新します。現在のディレクトリにインデックスファイルがある場合は、ファイルの一覧または HTML ページが表示されます。
機能の追加
ファイルサーバーで面白いことをしてみましょう。テンプレートページを提供します。新しいファイルを作成し、ここに貼り付けます。
<!DOCTYPE html>
<html>
<head>
<title>Caddy tutorial</title>
</head>
<body>
Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
</body>
</html>
これを現在のディレクトリに caddy.html
として保存し、ブラウザで読み込みます:https://localhost/caddy.html
出力は次のとおりです。
Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
ちょっと待って。今日の日付が表示されるはずです。なぜ機能しなかったのでしょうか?サーバーがまだテンプレートを評価するように設定されていないからです!簡単に修正できます。Caddyfile に行を追加して、次のようにします。
localhost
templates
file_server browse
保存して、ブラウザのタブをリロードします。次のようになります。
Page loaded at: Sat Apr 27 17:14:45 UTC 2024
Caddy の テンプレートモジュール を使用すると、他の HTML ファイルを含める、サブリクエストを行う、レスポンスヘッダーを設定する、データ構造を操作するなど、静的ファイルで多くの便利なことができます!
迅速かつ最新の圧縮アルゴリズムを使用して、応答を圧縮するのが良い習慣です。encode
ディレクティブを使用して、Gzip と Zstandard のサポートを有効にしましょう。
localhost
encode zstd gzip
templates
file_server browse
それが、セミ高度な本番環境対応サイトを稼働させるための基本的なプロセスです!
自動 HTTPS を有効にする準備ができたら、サイトのアドレス(チュートリアルでは localhost
)をドメイン名に置き換えるだけです。HTTPS クイックスタートガイド で詳細情報をご覧ください。
複数のサイト
現在の Caddyfile では、1 つのサイト定義しか持つことができません!最初の行だけがサイトのアドレスになり、ファイルの残りの部分はすべてそのサイトのディレクティブになります。
しかし、複数のサイトを追加できるようにすることは簡単です!
今のところの Caddyfile
localhost
encode zstd gzip
templates
file_server browse
は次のものと同等です
localhost {
encode zstd gzip
templates
file_server browse
}
ただし、2 番目のものは複数のサイトを追加できます。
サイトブロックを中括弧 { }
で囲むことで、同じ Caddyfile に複数の異なるサイトを定義できます。
例えば
:8080 {
respond "I am 8080"
}
:8081 {
respond "I am 8081"
}
サイトブロックを中括弧で囲む場合、アドレス は中括弧の外にのみ表示され、ディレクティブ は中にのみ表示されます。
同じ設定を共有する複数のサイトの場合、さらにアドレスを追加できます。例えば
:8080, :8081 {
...
}
各アドレスが一意である限り、必要なだけ異なるサイトを定義できます。
マッチャー
特定のリクエストのみにディレクティブを適用したい場合があります。たとえば、ファイルサーバーとリバースプロキシの両方を使用したいとしますが、すべてのリクエストで両方を行うことはできません!ファイルサーバーは静的ファイルを書き込むか、リバースプロキシはリクエストをバックエンドにプロキシします。
この設定は、期待どおりには動作しません。
localhost
file_server
reverse_proxy 127.0.0.1:9005
実際には、API リクエスト、つまりベースパスが /api/
のリクエストのみにリバースプロキシを使用したい場合があります。マッチャートークン を追加することで簡単に実行できます。
localhost
file_server
reverse_proxy /api/* 127.0.0.1:9005
これで、/api/
で始まるすべてのリクエストでリバースプロキシが優先されます。
追加した /api/*
トークンは、**マッチャートークン** と呼ばれます。スラッシュ /
で始まり、ディレクティブの直後に表示されるため、マッチャートークンであることがわかります(ただし、ディレクティブのドキュメント で確認することもできます)。
マッチャーは非常に強力です。マッチャーに名前を付けて @name
のように使用すると、リクエストパスだけでなく、さらに多くの条件で一致させることができます!続行する前に、マッチャーの詳細を学ぶ 時間を取りましょう!
環境変数
Caddyfile アダプターでは、Caddyfile が解析される前に環境変数 を置換できます。
最初に、環境変数を設定します(Caddy を実行する同じシェルで)。
export SITE_ADDRESS=localhost:9055
次に、Caddyfile で次のように使用できます。
{$SITE_ADDRESS}
file_server
Caddyfile が解析される前に、次のように展開されます。
localhost:9055
file_server
環境変数は、Caddyfile の任意の場所、任意の数のトークンで使用できます。
コメント
最後に、最も役立つものがあります。Caddyfile に何かをコメントしたりメモしたりしたい場合は、#
で始まるコメントを使用できます。
# this starts a comment