水曜日, 5月 13, 2015

Goで書かれたHTTP2対応サーバーCADDYを試す

CADDYというHTTP2対応サーバーを見つけたので簡単に使ってみる。

https://caddyserver.com/

Goで書かれていて、インストールは各プラットホーム毎のバイナリを適当に配置するだけなので、インストールが楽。

起動する

とりあえずPATHが通っているところに置いて叩いてみる。

$ caddy
0.0.0.0:2015

デフォルトポートが2015なのだけど、来年になったら2016になるのだろうか。

curlで叩いてヘッダを見てみる。

$ curl -I localhost:2015
HTTP/1.1 404 Not Found
Server: Caddy
Date: Tue, 12 May 2015 13:52:04 GMT
Content-Length: 13
Content-Type: text/plain; charset=utf-8

404だけど、とりあえず動いている。HTTP2はHTTPSじゃないと動かないので、HTTP/1.1なのが残念。
(CADDYのサイトはCADDYでホストされていて、HTTP2が使われていることをブラウザで確認しています)

設定を変える

CADDYの設定ファイルは-confオプションで任意のファイルを指定出来るけど、デフォルトではコマンドを叩いたディレクトリにあるCaddyfileを見るらしい。
1行目には必ずlistenするアドレスを書けということなので、ポートをデフォルトから変更したものを記述してみる。

$ echo "localhost:2016" > Caddyfile
$ caddy
localhost:2016

無事ポート2016で起動した。
ちなみに1行目と言うのは、設定値としての1行目で、コメントは普通にかける。コメントはapacheと同様、#から始まる文字列。

静的ファイル配信

このままでは404を返すだけのサーバーなので、とりあえず静的ファイルを返すようにしてみる。
まずはドキュメントルートとなるディレクトリを作り、適当なHTMLファイルを置く。

$ mkdir public_html
$ echo "Hello, world" > public_html/index.html

次にCaddyfileをこんな感じに編集する。
rootはドキュメントルートを指定するディレクティブ。カッコでくくらずに、そのまま次の行に書いてもよいのだけど、書いた方が分かりやすいと思う。

# example
localhost:2016 {
    root ./public_html/
}

再起動して、curlしてみる。

$ curl localhost:2016
Hello, world

無事、静的ファイルを配信出来た。

markdown配信

リダイレクトやプロキシといった機能の他に、CADDY特有の機能がいくつかある。その一つのmarkdown配信機能を使ってみる。

設定はmarkdownディレクティブの後ろに、適用するPATHを記述する。このPATHはリクエストのパスであると同時にmarkdownファイルを置くディレクトリの事も示すらしい。
つまりmarkdownファイルは、public_html/blogではなくblogというディレクトリに置く必要がある。

# example
localhost:2016 {
    root ./public_html/
    markdown /blog
}

次に記事を作る。

$ mkdir blog
$ echo "# Hello, markdown" > blog/hello.md 

curlで確認。

$ curl localhost:2016/blog/hello.md
<!DOCTYPE html>
<html>
    <head>
        <title># Hello, markdown</title>
        <meta charset="utf-8">


    </head>
    <body>
        <h1>Hello, markdown</h1>

    </body>
</html>

ソースを確認したところ、markdownの処理には https://github.com/russross/blackfriday を使っていた。

性能

性能について、FAQには正確に答えるのは難しいとしながら、概ね速いと書いてある。
Apacheよりは速くて、nginxよりちょっと遅いぐらいという事なので、実用上十分な速さと思っておけば良さそう。
CADDYのコンセプトは設定が簡単なWebサーバなので、それでよいのだと思う。

感想

全部の機能を試したわけではないけど、1バイナリで完結して、設定が簡単に出来て、それなりに速いという使い勝手の良いサーバーという印象。
ちょっとしたサーバーが欲しいのだけど、Apacheやnginxだと大げさ過ぎるとか、設定が面倒という時に重宝しそう。

あとはfcgiを使ったプロジェクトのルートディレクトリにCaddyfileを置いといて、git cloneしてcaddyと叩いたら開発環境として立ち上がるみたいな使い方とか。

小回りが効くので、応用範囲が広そう。

0 件のコメント: