Nginx からCaddyへの移行 part1

■Nginx からCaddyへの移行 part1

今の仕事の関係で運用しているサーバーやアプリケーションなどに対して負荷テストなど行うことがあり、その際にどのWebサーバーなら良いパフォーマンスを発揮出来るのかなとか気になったので、下記のサイトを見て色々と考えた結果、Caddyで遊んでみようと思ったのだった。ランク外ですけど。
マイナビ – 6月Webサーバシェア

Caddyについてざっと調べてみると、

Caddy は オープンソースの HTTP/2 に対応したWeb サーバーである。
Caddy は Go 言語で記述されており、HTTP 機能には Go 標準ライブラリを使用している。
Caddy の特徴的な機能の 1 つに、デフォルトでの HTTPS の有効化がある。

とな。

常時SSLが当たり前の世の中となり、SSLのハンドシェイクが遅いという下記問題点はあるものの
(SYN→SYN ACK→ACK、ClientHello→ServerHello/Certificate、ServerHelloDone→ClientKeyExchange/ChangeCipherSpec/Finished という地獄シェイクがある)
それらを回避出来るHTTP/2を使えば速度的な問題も改善されるという。HTTP/2は”ストリーム”という概念が導入され、1コネクションで複数のリクエストとレスポンスを並行に処理できるようになったので、少ない通信量でより高速にやり取りが行える訳なのです。

前置きが長いので、さっさと環境構築へ。

CaddyGo言語で記述されているので、Goやらそれら関連する依存パッケージなどのインストールが必要となります。今回はEC2でAmazonlinux2という構成。

■amazon-linux-extrasを使ってGoをインストール

yumでインストールできるGoはバージョンが1.9系らしいので、
新しい目を使いたい場合はamazon-linux-extrasを使うが良いという。

$ amazon-linux-extras list | grep golang
 29  golang1.11               available    [ =1.11.3 ]
$ sudo amazon-linux-extras install golang1.11

特に問題なくインストールが完了したら「GOPATH」の設定

$ vim ~/.bashrc
 ------------------------
 export GOPATH=$HOME/.go
 ------------------------
$ source ~/.bashrc
$ go version
go version go1.13.4 linux/amd64

入った。

では本命のCaddyのインストール開始
とりあえずソースからビルドしてインストールを試みる。

$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build

順調と思いきやgo buildの途中でエラーが出た。

------------------------
cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
------------------------
$ sudo find /usr/ -name crti*
/usr/lib64/crti.o

と見つかったのでパスを通す。

$ export LIBRARY_PATH=/usr/lib64:$LIBRARY_PATH

なんかおかしい。素直にyumからCaddyのインストールをし直した。

$ sudo yum install glibc-devel
$ sudo yum install yum-plugin-copr
$ sudo yum copr enable @caddy/caddy
$ sudo yum install caddy
$ which caddy
 /usr/bin/caddy
$ caddy version
v2.1.1 

おういえ。

ここから先はCaddyの設定ファイル関連の記述とか。
その2で書くスタイル。