HTTPサーバと言えばNginxがおそらく一番普及していますが、これからはCaddyの時代かもしれません。CaddyならNginxと同じことがより少ない記述量で設定でき、HTTPSの証明書取得・更新まで自動で行ってくれます。ということでCaddyを使って証明書付きのHTTPSサーバーを爆速で立ち上げます。
準備
DNSサーバを設定して、ウェブサーバに使うホスト名とIPアドレスの対応付けを行っておきます。
インストール
Dockerイメージもありますが、ここでは普通にインストールします。Debian、Ubuntuの場合を記します。それ以外の場合は公式の以下を参照。
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
$ sudo apt update
$ sudo apt install caddy
設定ファイル作成
Caddyfile
という名前のファイルがCaddyの設定ファイルになります。ここでは静的なウェブサーバを立てます。
www.example.com {
root * /home/me/mysite
file_server
}
以上でwww.example.com
というホスト名のサーバを立てて、その内容は/home/me/mysite
ディレクトリから提供するようになっています。
ウェブサーバ起動
Caddyfile
があるディレクトリで以下のコマンドを実行します。
$ caddy run
これでウェブサーバが起動します。同時にwww.example.com
の証明書を Let's Encrypt 等から取得してくることにより、HTTPSでのアクセスも勝手にできるようになっています。そしてHTTPでのアクセスはHTTPSにリダイレクトされます。もちろん証明書の更新も自動でやっておいてくれます。
以上、終わり!
その他のレシピ
リバースプロキシする場合
www.example.com {
reverse_proxy http://localhost:8000
# 以下のように省略可能
# reverse_proxy :8000
}
X-Forwarded-For
、X-Forwarded-Proto
、X-Forwarded-Host
の各ヘッダは自動で付加される。
パスで分ける場合
www.example.com {
handle /hoge/* {
reverse_proxy http://192.168.1.2:8000
# /hoge/aaa は http://192.168.1.2:8000/hoge/aaa にプロキシされる
}
handle_path /fuga/* {
reverse_proxy http://192.168.1.3:8000
# /fuga/aaa は http://192.168.1.3:8000/aaa にプロキシされる
}
}
HTTPのみで立てる場合
:8000 {
root * /srv/http/hoge
file_server
}
http://www.example.com {
root * /src/http/fuga
file_server
}
ホスト名を書かずにポートだけ書いたり、明示的にhttp://
とすればHTTPのみになる。
あとがき
証明書が自動更新されるHTTPSサーバを4行の設定ファイルだけで立てられるわけですから、すごいですね。NginxとCertbotの構成を全部置き換えたいです。