■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コネクションで複数のリクエストとレスポンスを並行に処理できるようになったので、少ない通信量でより高速にやり取りが行える訳なのです。
前置きが長いので、さっさと環境構築へ。
CaddyはGo言語で記述されているので、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で書くスタイル。