Caddyは、オープンソースの
Webサーバーであり、特に
HTTP/2|HTTP_2と
HTTP/3|HTTP_3のサポートに優れています。Go言語で開発されており、そのHTTP機能にはGo標準ライブラリが活用されています。このサーバーの特筆すべき点は、デフォルトで
HTTPSが有効になっていることです。
Caddyの開発と歴史
Caddyの開発は、マシュー・ホルトによって2014年12月に開始され、2015年4月に初リリースされました。その後、200人以上の開発者が加わり、
QUICのサポートなどの機能拡張が行われ、現在に至っています。
Caddyの主な特徴
Caddyは、以下のような様々なWeb技術をサポートしています。
- - 対応アーキテクチャ: i386, amd64, ARM
- - 対応OS: Windows, macOS, Linux, 各種BSD, Android, Plan 9
これらの環境向けに、静的コンパイルされた
バイナリとして配布されています。
Caddyの機能詳細
Caddyは、単なる
Webサーバーとしてだけでなく、
リバースプロキシやロードバランサーとしても機能します。その機能の多くはGoのライブラリに由来しますが、
ミドルウェアとして提供される拡張機能も豊富です。これらの機能は、Caddyfileというテキスト形式の設定ファイルを通して
ディレクティブで指定できます。
主な機能
- - HTTP/1.1, HTTP/2|HTTP_2, HTTP/3|HTTP_3のサポート: 最新のプロトコルに対応し、高速な通信を可能にします。特にHTTP/2|HTTP_2とHTTP/3|HTTP_3はデフォルトでHTTPS通信となります。
- - HTTPSの自動有効化: ドメイン名があれば、Let's Encryptなどの認証局を利用して自動的にHTTPSを有効にします。
- - TLS 1.3サポート: 最新のセキュリティプロトコルをサポートしています。
- - SNI: 複数のSSL証明書を1つのIPアドレスでホストできます。
- - OCSPステープリング: 証明書の有効性を高速に確認できます。
- - 仮想ホスト: 1つのサーバーで複数のWebサイトを運用できます。
- - IPv4/IPv6サポート: 最新のネットワーク環境に対応しています。
- - 静的ファイル配信: sendfileを使い、高速なファイル配信を実現します。
- - Gracefulな再起動/リロード: サービスを中断せずに設定変更を反映できます。
- - リバースプロキシ: HTTPとWebSocketの両方をサポートします。
- - 負荷分散: ヘルスチェックによる負荷分散が可能です。
- - FastCGIプロキシ: PHPなどのアプリケーションを効率的に実行できます。
- - テンプレート: サーバーサイドインクルードのような機能を提供します。
- - Markdownレンダリング: Markdown形式のファイルをHTMLとして表示できます。
- - WebSocketを介したCGI: WebSocketを利用した動的なコンテンツ配信を可能にします。
- - Gzip圧縮: 通信データの圧縮により、高速なデータ転送を実現します。
- - Basic認証: ユーザー認証を簡単に実装できます。
- - URLリライト/リダイレクト: URLの書き換えやリダイレクトを柔軟に行えます。
- - ファイル閲覧: Webブラウザ上でファイルを閲覧できます。
- - ログ取得: アクセスログ、エラーログ、プロセスレベルのログを取得できます。
- - QUICのサポート: 実験的段階ではありますが、最新のトランスポートプロトコルをサポートしています。
セキュリティ
Caddyは、Heartbleed、DROWN、POODLE、BEASTなどの既知のCVE(
脆弱性情報データベース)に対して安全であるとされています。さらに、TLS_FALLBACK_SCSVを使用することでプロトコルのダウングレード攻撃を防止します。過去には、
Basic認証ミドルウェアの
タイミング攻撃脆弱性に対処するためにパッチが適用されたこともあります。
Caddyは、TLS 1.0から1.2をサポートし、暗号スイートにはAES-256-GCM-SHA-384によるECDHE-ECDSAを標準としています。
Cloudflareとの連携により、実験的なTLS 1.3通信も提供しています。
Caddyの最大の特長の一つは、
HTTPS通信の自動化機能です。適切な
ドメイン名を持つサイトでは、ACMEプロトコルを介してTLS証明書を自動的に取得し、
HTTPSを有効にします。HTTPリクエストは
HTTPSにリダイレクトされます。証明書の取得と更新はCaddyが自動で行い、デフォルトの認証局は
Let's Encryptです。必要に応じて他のACME認証局も利用可能です。また、「オンデマンドTLS」という機能を利用すると、TLSハンドシェイク時に必要な場合にのみ証明書を取得し、メモリにキャッシュすることも可能です。
テレメトリー機能
バージョン0.11以降、Caddyにはテレメトリー機能が搭載されています。公式Webサイトからダウンロードした場合はデフォルトで無効になっていますが、ソースコードからビルドした場合はデフォルトで有効になります。
Caddyの影響
Miek Gieben氏によって、CaddyのフォークとしてCoreDNSが作成されました。CoreDNSは、Caddyのシンプルで分かりやすい設定構文、プラグインアーキテクチャ、そしてGo言語で記述されたコードを継承しています。
外部リンク