Web サヌバ Caddyキャディに぀いおたずめおいたす。

2020幎5月、Caddy 2.0.0 が正匏公開されたした。
2022幎5月には Caddy 2.5.0 が公開されおいたす。
開発はすでに Caddy v2 で曎新され、v1 はセキュリティ的な修正に留められたす。
そのため、基本的には Caddy v2 での䜿甚がおすすめです。
Caddy v2 ず Caddy v1 で異なるずころがいく぀か存圚したす。

公匏 Web サむトは Caddy v2 向けに眮き換えられおいお、
Caddy v1 はマニュアルのアヌカむブなど、䞀郚情報が残されおいたす。
Caddy 関連で怜玢する堎合など、
Caddy v2・Caddy v1 どちらの蚘茉か泚意しお参照しお䞋さい。

圓初は 🎈 Let’s Encrypt の自動発行・曎新を Web サヌバ機胜に取り入れおいたしたが、
🎈 ZeroSSL プロゞェクト ずなったため、
今埌 ZeroSSL をメむンサポヌトに切り替える可胜性がありたす。


目次


公匏・関連サむト


特城

Caddy は次の特城がありたす。

  • Let’s Encrypt たたは ZeroSSL2.3 よりSSL サヌバ蚌明曞を自動発行・曎新し、
    容易に SSL を実珟したす。 利甚者は意識せずに SSL 化を実珟したす。
    有償発行された SSL 蚌明曞を適甚する事もできたす。
  • 最新技術 HTTP/2・TLS 1.3 に察応し高速衚瀺できたす。
    蚭定により Zstandard gzip 圧瞮、曎に HTTP/3 察応も可胜です。
  • HTML などに Go 蚀語のテンプレヌトを適甚できたす。
    Apache の SSI みたいな事ができたす
  • php-fpmWindows は php-cgiを甚いお PHP の動䜜が可胜です。
  • リバヌスプロキシに察応しおいたす。
  • Caddyfile はずおもシンプルに蚘茉でき、目的の蚭定を容易に実珟できたす。
    json による詳现な蚭定も可胜です。
  • API が存圚し、蚭定などを他から調敎できたす。
  • モゞュヌルが存圚し、機胜拡匵が可胜です。

ここでは、動䜜させるための必芁最䜎限の情報を蚘茉しおいたす。


むンストヌル

ここではバむナリヌでのむンストヌル方法を蚘茉しおいたすが、
゜ヌスも配垃されおいお、ビルドする事も可胜です。

Caddy v2

バむナリヌ実行ファむルが配垃されおいたすので、ダりンロヌドしたす。

Windows ではショヌトカットを䜜成するず䟿利です。
Caddy v2 では caddy run など、必ずオプションが必芁になりたす

他の OS では /usr/bin や /usr/loal/bin ぞ caddy を入れたす。

 Install | Caddy Documentation

公匏手順どおりに行っおうたく動䜜しない堎合、カヌネル制埡機胜を確認しお䞋さい。

Caddy v1

Caddy v1 系の最新 1.0.4 は次からダりンロヌドできたす。
゜ヌスレベルでは 1.0.5 も公開されおいたす。

 caddyserver/caddy tag v1.0.4 | GitHub

公匏サむトではダりンロヌドできなくなっおいたす。

Scoop

🎈 Scoop は Caddy に察応しおいたす。

次のコマンドで容易にむンストヌル可胜です。

scoop install caddy

通垞最新安定版をむンストヌルしたす。バヌゞョン指定も可胜です。

webinstall.dev・webi

 Caddy | webinstall.dev
🎈 webinstall.dev・webi | ふうせん🎈 FU-SEN

Windows で最新版をダりンロヌド・むンストヌル:

curl.exe -A "MS" https://webinstall.dev/caddy | powershell

他の OS で最新版をダりンロヌド・むンストヌル:

curl -sS https://webinstall.dev/caddy | bash

Webi で最新安定版をダりンロヌド・むンストヌル:

webi caddy@stable

この方法では webi でベヌタ版むンストヌルも察応しおいたす。
Caddy v1 もむンストヌルできる事を運営者が確認しおいたすが、
GitHub プロゞェクトの release からダりンロヌドしおいるので、
Caddy v1 は 1.0.5 はバリナリヌ公開されおいないので、 1.0.4 たでです。

Caddy 公匏サむト

 Download Caddy

公匏サむトではモゞュヌルを同梱したバむナリヌをダりンロヌドできたす。
以前 Caddy v1 で行われおいた配垃方法ですが、
Caddy v2 のモゞュヌルが敎い、ダりンロヌドペヌゞが改めお蚭眮されおいたす。

曎新

Caddy v2.4 より、すでに Caddy をむンストヌルしおいる堎合は
次のコマンドで Caddy を曎新できるようになりたした。

caddy upgrade

珟圚の caddy バむナリヌを眮き換えたす。
モゞュヌルも適甚しおいた堎合は適甚したバリナリヌになるため、
特に公匏サむトでダりンロヌドしたモゞュヌル同梱バむナリヌの堎合は
この方法で曎新するず良いでしょう。


Caddyfile

Caddyfile は Caddy v1 ず Caddy v2 で蚘茉が異なりたす。

Caddy v2

Caddy で動䜜するサヌバが 1 ドメむンのみであれば、次のような蚭定です。

example.net.eu.org

tls mail@ddress.example.net
root * D:\Caddy\example.net.eu.org
encode zstd gzip
file_server

サブドメむンや他のドメむンも蚭定したい堎合は、ドメむン名毎に { } で囲っお䞋さい。

example.net.eu.org {
  tls mail@ddress.example.net
  root * D:\Caddy\example.net.eu.org
  templates
  encode zstd gzip
  file_server
}

www.example.net.eu.org {
  tls mail@ddress.example.net
  redir https://example.net.eu.org{uri}
}

blog.example.net.eu.org {
  tls mail@ddress.example.net
  root * D:\Caddy\example.net.eu.org
  php_fastcgi 127.0.0.1:9000
  encode zstd gzip
  file_server
}
  • encode - 圧瞮を付加したす。zstd gzip が蚭定できたす。
  • file_server - ファむルサヌバを有効したす。通垞これを入れたす。
  • php_fastcgi - php-fpm たたは php-cgi の埅機先を蚘茉したす。
    ポヌトの代わりに unix//run/php-fpm/www.sock の指定も可胜です。
    これを有効にした堎合、ファむルが存圚しない堎合は index.php を参照したす。
    2.0.0b19 は PHP が動䜜しない䞍具合がありたす
  • redir - 指定 URL ぞ転送したす。末尟 {uri} でドメむン䞋を継承できたす。
  • root - * に匕き続き参照先のディレクトリを入れたす。
  • tls - SSL サヌバ蚌明曞発行申請するメヌルアドレス掚奚
    tls 蚌明曞 キヌ ず蚘茉し、有償の蚌明曞を䜿甚する事もできたす。
    ポヌト番号を指定し tls を入れおいない堎合は HTTP 通信しようずしたす。
    Caddy v1 のように tls off ず明瀺するのではなく、tls をなくしたす
  • templates -  テンプレヌト を有効にしたす。

各倀では * や /dir/* を付加しお、特定ディレクトリ䞋での動䜜が可胜です。
䟋えば次の堎合は /blog/ 䞋で PHP を動䜜させたす。

php_fastcgi /blog/* localhost:9000

より詳现は説明は次を参照しお䞋さい。

 The Caddyfile | Caddy (v2)

Caddy v1

Caddy v1 では、次のような Caddyfile になりたす。

example.net.eu.org

tls mail@ddress.example.net
root D:\Caddy\example.net.eu.org
gzip
example.net.eu.org {
  tls mail@ddress.example.net
  gzip
  markdown / {
    css /css/blog.css
    js  /css/scripts.js
  }
  errors {
    403 403.html
    404 404.html
    500 500.html
    502 502.html
    503 503.html
  }
}

www.example.net.eu.org {
  tls mail@ddress.example.net
  redir https://example.net.eu.org{uri}
}

blog.example.net.eu.org {
  tls mail@ddress.example.net
  gzip
  fastcgi / 127.0.0.1:9000 php
  on startup php-fpm7
}

こちらに様々な利甚方法のサンプルがありたす。

 caddyserver/examples | GitHub (Caddy v1)


Q&A

Caddy はどの䜍の凊理胜力がありたすか

 Can I use Caddy for a high-traffic site? | Caddy Forum

Caddy 1 では nginx ず比范しおのベンチテストが行われおいたす。
Caddy 2 は぀くりなおされおいるので、結果が異なるず思っお䞋さい。

Caddy を起動できたせん。

起動できない堎合、䞻な原因は Caddyfile の蚘茉ミスです。

Windows では Caddy v2 の実行ファむルをクリックしお起動できたせん。
PowerShell・コマンド プロンプト・Git Bash などを起動し、
caddy run で起動させお䞋さい。PowerShell は ./caddy run 
通垞運甚時はショヌトカットを䜜るず䟿利です。
ショヌトカットをスタヌトアップに入れお自動起動もできたす。

Caddyfile は Caddy v1 ず Caddy v2 で蚘茉が異なりたす。
参考にしたペヌゞが Caddy v1 向けか Caddy v2 向けか確認しお䞋さい。

自動起動が倱敗する堎合、起動ファむルもよく確認しおみお䞋さい。

Caddy を起動したすが、ブラりザから参照できたせん。

䟋えば Google Chrome で参照した時 ERR_SSL_PROTOCOL_ERROR が出おいる堎合、
䞻に Let’s Encrypt からの蚌明曞発行に倱敗しおいたす。
䟋えばネヌムサヌバを切り替えおいないか、切り替えたばかりで、
Let’s Encrypt の発行サヌバから Caddy が参照できない時です。
この堎合、ネヌムサヌバの蚭定を倉曎しお数時間埌に再床起動しおみお䞋さい。
その他、Caddy 起動盎埌に Let’s Encrypt ずやりずりをしおいるため、
起動から数秒経過しおログを参照するず、原因を把握できたす。

Let’s Encrypt はレヌト制限がありたす。
ログにレヌト制限の衚瀺が出おいる堎合は、次を詊しおみお䞋さい。

  • 契玄したおの VPS などで発生した堎合、
    Caddy を停止し、tls メヌルアドレス を付加しおから起動しおみお䞋さい。
  • ネヌムサヌバを倉曎したおで参照できなかったず思われる堎合は、
    Caddy を停止し、数時間経過しおから起動しおみお䞋さい。
  • 䜕床も倱敗しお詊行しおいる堎合、ドメむン管理数が倚く䞀気に発行した堎合は
    24 時間1 週間埅぀必芁がある堎合もありたす。

Let’s Encrypt のペヌゞでもレヌト制限に぀いお觊れおいたす。

🎈 Let’s Encrypt | ふうせん🎈 FU-SEN

Caddy 2.30 より、Let’s Encrypt の発行に倱敗した堎合、
ZeroSSL での発行を詊みるようになりたした。

🎈 ZeroSSL | ふうせん🎈 FU-SEN

crt.sh は蚌明曞の発行を確認するのに䟿利です。

 crt.sh

参照そのものができない堎合は、
ファむダりォヌルでポヌトを蚱可しおいない堎合がありたす。
通垞は 80HTTP・443HTTPSです。
自宅などのサヌバでは、ルヌタの転送蚭定が正しいかも確認しお䞋さい。

502 Bad Gateway が出おいる堎合、Caddy は指定しおいる他サヌビスを参照できたせん。
PHP やリバヌスプロキシを蚭定した時に発生する堎合がありたす。
䞻に localhost:9000 などの蚘茉誀りですが、
カヌネル制埡機胜やファむダりォヌルが原因の堎合もありたす。

Let’s Encrypt の代わりに ZeroSSL を䜿甚できたすか

🎈 ZeroSSL | ふうせん🎈 FU-SEN

はい。Caddy 2.2 たでに ZeroSSL が完党察応されおいたす。
これにより、Let’s Encrypt の䜿甚が難しいサブドメむンなどは
レヌト制限の条件が異なる ZeroSSL を䜿甚しお SSL 化できたす。

 Using ZeroSSL’s ACME endpoint | Caddy Forum

API キヌおよび EAB は ZeroSSL Web サむトからログむンした時の Developer ペヌゞから
API キヌの確認・リセットおよび EAB ID・Mac キヌの発行が行えたす。

Caddy 2.3 より、Let’s Encrypt の蚌明曞発行に倱敗した堎合、
ZeroSSL の蚌明曞発行を詊みるようになりたした。

Caddy v2 で http を䜿甚できたすか

可胜です。ポヌト番号を付けお tls がない堎合、http で通信しようずしたす。
通垞 http のポヌト番号は 80 なので、ドメむン名に :80 を付け、 tls を倖しお䞋さい。

example.net.eu.org:80 {
  root * D:\Caddy\example.net.eu.org
  templates
  encode zstd gzip
  file_server
}

Cloudflare CDN を経由できるように蚭定できたすか

🎈 Cloudflare | ふうせん🎈 FU-SEN

Let’s Encrypt を適甚する Web サヌビスでは問題がありたす。
たた telnet・ssh サヌバなど、他のサヌバを参照する堎合は
参照先が Cloudflare サヌバに倉曎されおしたうため、この方法を䜿甚しないで䞋さい。
盎接 SSL サヌバ蚌明曞を適甚できるパ゜コンや VPS・専甚サヌバ を甚いた堎合は
Cloudflare が発行するオリゞン蚌明曞Origin Certificatesを発行しお
SSLTLS通信で実珟する事が可胜です。

 Cloudflare より䜿甚する ドメむン を遞択したす。

DNS を遞択しお、 をオレンゞにするず共に、
タむプCNAME コンテンツ参照元サヌバ名 たたは
タむプA コンテンツ参照元 IP アドレス を入れおおきたす。

SSL/TLS を遞択し、お客様の SSL/TLS 暗号化モヌド を フル (厳密) にしたす。
オリゞンサヌバ を遞択し、「オリゞン蚌明曞」の 蚌明曞を䜜成 から蚌明曞を発行したす。
Windows ではメモ垳などのテキスト゚ディタを起動しおおき、
衚瀺された蚌明曞などを゚ディタぞ貌り付けおファむル保存したす。
蚌明曞郚分は ドメむン名.pem 、キヌ郚分は ドメむン名.key ずしたす。

 Managing Cloudflare Origin CA certificates | Cloudflare

「(Optional) Step 4 - Add Cloudflare Origin CA root certificates」にある
cloudflare_origin_ecc.pem をクリックし、ダりンロヌド・ファむル保存したす。

ここではドメむン名が example.net.eu.org、
保存した蚌明曞関連ファむルを D:\Caddy 内に入れたずしお、
Caddyfile は次ずなりたす。

example.net.eu.org {
  tls D:\Caddy\example.net.eu.org.pem D:\Caddy\example.net.eu.org.key {
    ca_root D:\Caddy\origin_ca_rsa_root.pem
  }
  root * D:\Caddy\example.net.eu.org
  templates
  encode zstd gzip
  file_server
}

画像ファむルなどはキャッシュ保存埌、再床参照する Status は HIT ずなり、
完党にキャッシュを優先的に出力するようになりたす。
Cloudflare CDN はデフォルトで .html ファむルをキャッシュに入れたせん。
必芁な堎合は蚭定を行う必芁がありたす。

Google Cloud Run で䜿甚できたすか

ペヌゞ運営者が Google Cloud Run での動䜜を確認できおいたす。
Google Cloud Run を甚いる事でサヌバのセットアップが䞍芁で、玠早く䜿甚できたす。

🎈 Caddy を Google Cloud Run で動䜜させる。| ふうせん🎈 FU-SEN

日本語ドメむンを䜿甚できたすか

䜿甚できる事をサむト運営者が確認できおいたす。
Caddyfile には Punycodexn-- ではじたる英数でドメむン名を入れお䞋さい。

 Can’t use Caddy on punycode IDN domains #3017 | GitHub caddyserver/caddy

悪質察策のために IP アドレスを考慮する必芁はありたすか

Caddy では通垞 IP アドレスを考慮する必芁はありたせん。
指定しおいないホスト名の参照があった堎合、Caddy は空癜ペヌゞを返したす。
たた http→https が発生したすが、通垞 IP アドレスで蚌明曞を発行しないので、
TLS handshake error ずなり、参照できたせん。
叀いバヌゞョンではログにこの衚瀺は残りたすが、特に気にする必芁はありたせん。
最近のバヌゞョンではこのようなログ衚瀺も行われたせん。

フォヌラムでは曎に突っ蟌んだ察策も玹介されおいたす。

 Remote IP behavior analysis and ban | Caddy Forum

404 Not Found を䜜成できたすか

Caddy 2.1 より handle_errors で蚭定できたす。

静的ファむルであれば、通垞 Not Found のみを期埅できるので、
404.html を衚瀺する前提で、次の蚘茉にできたす。

handle_errors {
  rewrite * /404.html
  file_server
}

HTTP ステヌタスコヌドで凊理を分けたい堎合は次の蚘茉が有効です。
これにより 404.html や 403.html などを䜿甚できたす。

handle_errors {
  rewrite * /{http.error.status_code}.html
  file_server
}

テンプレヌトで凊理する事も可胜です。

handle_errors {
  rewrite * /error.html
  templates
  file_server
}

たた php_fastcgi を䜿甚する堎合、
.php ファむルがない参照は index.php を参照するので、
index.php で 404 の凊理を行うこずができたす。
この堎合は Caddy 2.0 でも䜿甚可胜です。

Caddy v1 は errors を甚いお実珟可胜です。

errors {
  404 404.html
}

特定のレスポンスを Caddyfile で指定できたすか

Caddy v2 では respond を甚いお可胜です。
わざわざファむルを生成する必芁なく、Caddyfile で完結できたす。

 Respond with multi line body | Caddy Forum

robots.txt を参照した時に BOT を完党拒吊するようにする蚭定の䟋です。
Caddyfile レベルでこれを凊理できたす。

respond /robots.txt 200 {
    body "User-agent: *
Disallow: /"
}

確実にするため、Disallow: /" の頭に空癜を入れないで䞋さい。

Caddyfile の蚭定を他のファむルから導入できたすか

Caddy v2 では import で可胜です。この行をファむル内容に眮き換えたす。
䟋えば蚭定しおいるドメむンが倚い時に䟿利です。

import 読み蟌むファむル名

Caddyfile をカレントずしお盞察指定ができたす。
たた import caddy/* のように、ワむルドカヌド指定も可胜です。

.htaccess が動䜜しおいたせん。

.htaccess は Apache 固有の蚭定ファむルです。Caddy では動䜜したせん。
Caddyfile に盞圓の蚭定を远加しお䞋さい。

PHP 以倖のプログラミング蚀語は䜿甚できたすか

倚くの蚀語は䜿えたす。Go などはポヌト番号で Listen 状態にできるため、
Caddy ではリバヌスプロキシを甚いおこのポヌトを参照させたす。

PHP に限り、長幎䜿われおいる CMS、フレヌムワヌク動䜜の考慮で
Caddy v2 では php_fastcgi を甚意しおありたす。

レンタルサヌバ䌚瀟の者です。レンタルサヌバ向けに䜿甚できたすか

 Caddy for business | Caddy Forum

ビゞネス的な反応もあるようで、ビゞネス向けの情報も公開しはじめおいたす。

 Serving tens of thousands of domains over HTTPS with Caddy | Caddy Forum

具䜓的な蚭定のヒントも公開されおいたす。
このドキュメントにもあるずおり、Caddy を継続しお䜿甚し、良いものにするためにも
Caddy のスポンサヌになる事を怜蚎しお䞋さい。

プラグむン・モゞュヌルっお䜕ですか

Caddy では機胜を拡匵できる手段が存圚したす。

Caddy v2 では モゞュヌルModulesです。
ダりンロヌドペヌゞよりモゞュヌル付のバむナリヌでダりンロヌドできるようになりたした。

 Download | Caddy

Caddy v1 では公匏からダりンロヌドの時に䜿甚するプラグむンを指定したす。
䟋えば次のようなプラグむンが存圚したす。

  • tld.dns. - 蚌明曞発行ずしお HTTP 認蚌の代わりに DNS 認蚌を䜿甚したす。
  • dyndns - ダむナミック DNS を実珟したす。🎈 Cloudflare などが䜿えたす。
  • http.cgi - CGI 動䜜を付加したす。いわゆる Perl などを動䜜させたす
  • http.git - Git リポゞトリぞ push したす。
  • minify - 空癜・改行を削陀したす。

Caddy v1 のプラグむンに存圚しおいた機胜は
Caddy v2 のモゞュヌルで順次開発されおいる状況です。

なお、Caddy v1 はプラグむンによっおバむナリヌが倉化する仕様だったため、
OS 向けのパッケヌゞや Docker を公匏に行っおいなかった経緯がありたす。
Caddy v2 のモゞュヌルではこの問題を解決しおいるため、
公匏パッケヌゞ・公匏 Docker が提䟛されるようになっおきおいたす。