ちょっとした調べ物をしていたら、CaddyというGo製のWebサーバーが便利だということを知りまして。
CADDYで手軽にHTTP/2サーバを立てる - yuw27b’s blog
Caddy で HTTP/2 と php-fpm を利用する - Qiita
Caddy?
Goで実装されたWebサーバーだそうです。
https://github.com/mholt/caddy
機能はこちら。
Features
- 設定ファイルが簡単&バリデーションができる
- 静的ファイル配信&動的配信(テンプレート、プロキシ、FastCGI)が可能
- CLIサポート
- プラグイン
- マルチコア対応
- 組み込みWebサーバーとして使用可能
- コマンド起動が可能
- Let's Encrypt対応
- 自己書名証明書の自動生成も可能
- HTTP/2、QUIC、WebSocketが使える
などなど、いろいろあるようですが、ちょっとしたWebサーバーとして扱うことも簡単にできそうなので、良さそうだなぁと。
というわけで、ちょっと試してみます。
インストール
ダウンロードは、こちらから。
Download
今回は、無料のPersonalライセンスを選択します。ページ下部にダイレクトリンクができるので、そちらを使ってダウンロード。
現時点でのバージョンは、0.10.10のようです。
$ wget https://caddyserver.com/download/linux/amd64?license=personal -O caddy_v0.10.10_linux_amd64_personal.tar.gz
ダウンロード時に、プラグインを付けることもできるみたいですね。
https://caddyserver.com/download/linux/amd64?plugins=http.prometheus&license=personal
とっかかりは、このあたりを見るとよいでしょう。
今回は、特になにも付けずダウンロード、展開。
$ tar -zxvf caddy_v0.10.10_linux_amd64_personal.tar.gz
起動は、カレントディレクトリに展開された「caddy」ファイルを実行します。
ファイル一覧。
$ ls -1 CHANGES.txt EULA.txt LICENSES.txt README.txt caddy caddy_v0.10.10_linux_amd64_personal.tar.gz init
起動。
$ ./caddy Activating privacy features... done. http://:2015 WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with "ulimit -n 8192".
ファイルディスクリプタ数の警告が設定によっては出るみたいですが、これでカレントディレクトリをドキュメントルートとして2015ポートをリッスンして
起動します。
確認。
$ curl localhost:2015/README.txt CADDY 0.10.10 Website https://caddyserver.com Community Forum https://caddy.community Twitter @caddyserver Source Code https://github.com/mholt/caddy https://github.com/caddyserver For instructions on using Caddy, please see the docs on the website. For a list of what's new in this version, see CHANGES.txt. For a good time, follow @mholt6 on Twitter. Want to get involved with Caddy's development? We love to have contributions! Please file an issue on GitHub to discuss a change or fix you'd like to make, then submit a pull request and we'll review it! Your contributions will reach millions of people who connect to sites served by Caddy. Extend Caddy by developing a plugin for it! Instructions on the project wiki: https://github.com/mholt/caddy/wiki And thanks - you're awesome! If you think Caddy is awesome too, consider sponsoring it: https://caddyserver.com/pricing - and help keep Caddy free for personal use. --- (c) 2015-2017 Light Code Labs, LLC
はい。
CLIでオプション指定
caddyコマンドには、けっこうな数の起動オプションがあり、設定を変更できます。
いくつか、使いそうなものを。
ポートの変更。リッスンポートを8080に。
$ ./caddy -port 8080
ドキュメントルートの変更。
## コンテンツ作成 $ mkdir docroot $ echo 'Hello Caddy!' > docroot/hello.txt ## ドキュメントルートを指定して起動 $ ./caddy -root docroot ## 確認 $ curl localhost:2015/hello.txt Hello Caddy!
Caddyfileを作成する
設定は、CLIで指定するだけではなく、「Caddyfile」という設定ファイルを使って指定することもできます。
先ほどの、ポート8080でdocrootな指定の例だとこうなるのですが…
※ちなみに、ポートを指定しないと80でリッスンしようとするみたいです
Caddyfile
:8080 root docroot
このまま起動すると、デフォルトでメールアドレスの入力を求められ、Let's Encryptを使おうとします。
$ ./caddy Activating privacy features... Your sites will be served over HTTPS automatically using Let's Encrypt. By continuing, you agree to the Let's Encrypt Subscriber Agreement at: https://acme-v01.api.letsencrypt.org/terms Please enter your email address so you can recover your account if needed. You can leave it blank, but you'll lose the ability to recover your account. Email address:
とりあえず、HTTPSについてはオフにしたい場合は、「tls off」を指定します。
Caddyfile
:8080 root docroot tls off
これで起動すると
$ ./caddy
先ほどCLIで指定した内容を、合わせた挙動になります。
$ curl localhost:8080/hello.txt Hello Caddy!
デフォルトではカレントディレクトリにある「Caddyfile」を読み込むようですが、別ディレクトリにある場合は「-conf」で指定すればよいようです。
$ ./caddy -conf /path/to/Caddyfile
ちなみに、自己書名証明書をCaddyに自動生成させる場合は、「tls self_signed」と指定します。
tls
tls self_signed
確認。
$ curl -k https://localhost:8080/hello.txt
Hello Caddy!
このあたりを見ていると、もっと複雑な設定が書けそうですが、今回は対象外。
プロキシ
最後に、プロキシサーバーとして使ってみましょう。
172.17.0.2にnginxサーバーを立てたとします。
$ curl 172.17.0.2 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
このサーバーにプロキシしてみましょう。
Caddyfileを、次のように設定します。
Caddyfile
:2015 tls off proxy / 172.17.0.2/
proxyディレクティブを指定します。
これで起動して
$ ./caddy
確認。
$ curl localhost:2015 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
無事、プロキシできたようです。
お手軽に使えそうで、なかなか便利そうな感じですね。ちょっとしたところから、使っていってみようかなと思います。