Caddy
Caddy はオープンソース[3]のHTTP/2、HTTP/3に対応したWebサーバである。Caddy Webサーバ と呼ばれることもある。
作者 | Matthew Holt |
---|---|
初版 | 2015年4月28日 |
最新版 |
2.7.6
/ 2023年12月8日[1] |
リポジトリ | |
プログラミング 言語 | Go[2] |
対応OS | Windows, OS X, Linux, 各種 BSD, Android, Plan 9 |
サポート状況 | 活動中 |
種別 | Webサーバ, リバースプロキシサーバー, ロードバランサー |
ライセンス | Apache 2 |
公式サイト |
caddyserver |
CaddyはGo言語で記述されており、HTTP機能にはGo標準ライブラリを使用している。
Caddyの特徴的な機能の1つに、デフォルトでのHTTPSの有効化がある[4] [5] [6]。
開発者のマシュー・ホルト (Matthew Holt) はCaddyの開発を 2014年12月に開始した。そして2015年4月にリリースした[7]。それから200人以上の開発者が加わりQUICのサポートを追加するなどして発展して来た。
CaddyはさまざまなWeb技術をサポートしている。
Caddyは、i386 / amd64 / ARM アーキテクチャに対応しており、多くのオペレーティングシステム (Windows / Mac / Linux / 各種BSD / Android / Plan 9) それぞれに向けて静的コンパイルされたバイナリの実行ファイルとして使用できる。
特徴
編集Caddyでは多数のWebサイト向け技術が利用できる。
Caddyはリバースプロキシおよびロードバランサーとしても機能する。
Caddyの機能のほとんどは、Goのライブラリ実装に由来する。しかしミドルウェアとして提供されている拡張機能もある。それらはCaddyfile(Caddyの構成に使用されるテキストファイル)からディレクティブで指定できる。[8]
機能の一覧
- HTTP/1.1(プレーンテキストベースのHTTP通信)およびHTTP/2(デフォルトでのHTTPS通信)、HTTP/3(デフォルトでのHTTPS通信)への対応
- HTTPSの自動有効化もしくは手動での設定
- 仮想ホスト(同一ポートを使用した複数サイトの構築)[10]
- IPv4およびIPv6のネイティブサポート
- 静的ファイル配信(可能であればsendfileを使用)
- Gracefulな再起動 / リロード
- リバースプロキシ(HTTPまたはWebSocket)
- ヘルスチェックによる負荷分散
- FastCGIプロキシ[11] [12]
- テンプレート(サーバーサイドインクルード に近い)
- Markdownレンダリング
- WebSocketを介したCGI
- Gzip圧縮
- Basic認証
- URLリライト
- リダイレクト
- ファイル閲覧
- ログの取得:アクセス / エラー / プロセス レベル
- QUICのサポート(実験的)
セキュリティ
編集Caddyは広く知られた数多の CVE(脆弱性情報データベース)に関して安全である。ここには Heartbleed / DROWN / POODLE / BEASTなども含まれる。[13] さらにCaddyではTLS_FALLBACK_SCSVを使用することでプロトコルのダウングレード攻撃を防ぐこともできる。
2015年6月2日に、バージョン0.7.1がリリースされた。これはCaddyのBasic認証ミドルウェアに対するタイミング攻撃の脆弱性に対してパッチを当てるためだった[14]。
プロトコルおよび暗号スイートに関して、CaddyはTLS 1.0 - 1.2 使用し、且つ、AES-256 - GCM - SHA-384 よるECDHE - ECDSA(楕円曲線ディフィー・ヘルマン鍵共有 - 楕円曲線 DSA)を標準としている。ただし他の多くの暗号もサポートしている。CaddyはCloudflare も使用されており、実験的なTLS 1.3通信の提供が行われている[15]。
C言語で記述された従来のプログラムに見られたような、まず完全な特権を与えてそれを必要に応じて段階的に絞って行くしくみは、Go 言語のプログラムでは特殊な方法でしか実現できないかもしくはまったく不可能である[16]。
HTTPS通信の自動化
編集Caddyは、適正なドメイン名(ACME プロトコル を介して TLS証明書を要求できるドメイン名)を持つサイトでは、デフォルトでHTTPS通信を有効化する。HTTPリクエストはHTTPSにリダイレクトされる[17]。
Caddyはサーバ起動時に、必要に応じて証明書を取得し、サーバ稼働中は証明書を更新し続ける。
デフォルトの認証局 Let's Encryptである。2016 年第 1 四半期に、CaddyはLet's Encryptが発行した証明書の約 2 % を占めていた[18]。また、ユーザーは、対象とする ACME 認証局 をカスタマイズすることもできる。この機能はサーバ構成をテストする時に有用である。
他の設定を採ることも可能である。「オンデマンドTLS」と呼ばれる機能である。この機能を用いると、Caddyは起動時ではなく TLSハンドシェイク時に、必要な場合にのみ証明書を取得する[19]。この機能を有効にするには、ユーザーは、発行可能な証明書の最大数を指定する必要がある。オンデマンドTLS機能が有効な場合、Caddyは、まだ証明書が無いホスト名に対するリクエストを受け取ると、取得した証明書をメモリにキャッシュしてディスクに保存しながら、ACMEを介して新しい証明書を要求し、それをすぐに提供する。 通常、このプロセスには数秒掛かる。そのため転送ビットレートの制約は厳しくなる。
TLS通信において、Caddyはセッションチケットキーを定期的に自動的にローテーションする。このことで転送する情報の完全な機密性を保持している[20]。
テレメトリー
編集バージョン0.11から、Caddyにテレメトリー機能が搭載された [21]。これは公式WebサイトからCaddyをダウンロードする場合はオプトイン(デフォルトで無効)となっている。一方、ソースからビルドする場合はオプトアウト(デフォルトで有効)である[22] 。
影響
編集CoreDNS
編集Miek Giebenは Caddy WebサーバのフォークからCoreDNSを作成した。Caddyの単純な構成構文、プラグインアーキテクチャ、およびGo言語で記述されたコードが活用されている[23]。
脚注
編集- ^ “Releases”. Github. 11 Nov 2021閲覧。
- ^ Gerrand, Andrew (17 February 2016). “Go 1.6 is released”. golang.org. 5 March 2016閲覧。
- ^ “Light Code Labs”. lightcodelabs.com. Light Code Labs. 2019年9月15日閲覧。 “Caddy is an open source, easy-to-use HTTP/2 web server...”
- ^ Johnson (23 February 2016). “A Better Web Server with Free SSL”. VolumeLabs.net. 5 March 2016閲覧。
- ^ “Automatic HTTPS with Caddy Server” (18 December 2015). 5 March 2016閲覧。
- ^ Aas, Josh (12 February 2016). NYLUG Presents: Josh Aas on Let's Encrypt: A Free, Automated, and Open CA. Bloomberg.
- ^ “Show HN: Caddy, a cross-platform HTTP/2 web server”. news.ycombinator.com (2015年4月28日). 2015年4月28日閲覧。
- ^ “The Caddyfile”. 29 February 2016閲覧。
- ^ “tls - Caddy Directives”. 2016年3月8日閲覧。
- ^ Benedetti, Benoit (November 2015). “Caddy, Le Serveur Web Facile [Caddy, The Easy Web Server]” (French). GNU/Linux Magazine France (France)
- ^ “How to Setup [sic] the Caddy Web Server with php-fpm”. 2017年8月18日時点のオリジナルよりアーカイブ。2016年3月9日閲覧。
- ^ Beke (2015年8月21日). “Caddy Server and WordPress (PHP-FPM)”. 2015年8月21日閲覧。
- ^ “SSL Server Test: caddyserver.com (Powered by Qualys SSL Labs)”. SSLLabs.com. 5 March 2016閲覧。
- ^ “Release 0.7.1 · mholt/caddy” (2015年6月2日). 2015年6月2日閲覧。
- ^ Nick Sullivan [@grittygrease] (2016年3月5日). "It's built in Go using custom versions @rlbarnes's Mint and @mholt6's Caddy". X(旧Twitter)より2016年3月4日閲覧。
- ^ “syscall: Setuid/Setgid doesn't apply to all threads on Linux” (21 January 2011). 5 March 2016閲覧。
- ^ “Automatic HTTPS”. 2016年3月5日閲覧。
- ^ Eckersley, Peter (21 February 2016). USENIX Enigma 2016 - Several Horror Stories about the Encrypted Web. YouTube. USENIX.
- ^ “On-Demand TLS”. 5 March 2016閲覧。
- ^ Kubacki (12 April 2016). “server: Rotate TLS ticket 'keys'”. 13 June 2019時点のオリジナルよりアーカイブ。13 June 2019閲覧。
- ^ “Caddy 0.11 Will Have Telemetry” (英語). Caddy. (2018年3月30日) 2018年6月5日閲覧。
- ^ “Caddy Telemetry - Documentation”. caddyserver.com. 20 February 2019閲覧。
- ^ Belamaric, John; Liu, Cricket (2019). “1: Introduction”. Learning CoreDNS: Configuring DNS for Cloud Native Environments (1 ed.). ISBN 9781492047964. OCLC 1091363083. What is CoreDNS?