Caddy 高速WEB サーバ(http2 quic対応) on CentOS7
2019年9月6日Linux Tips, Wordpress, テクニカル, トピックス, ノウハウ
http2対応の高速サーバを今回扱ってみる。このサーバはGo言語で開発されたWEBサーバです。導入にはコンパイルから行う場合はGo言語開発環境が必要ですが
バイナリーから入れるのであれば、特にGo言語開発環境は必要ありません。導入方法は幾つかやり方があります。一番簡なのはCentOS7の場合ならepelレポジトリー
から導入するのが簡単です。今回はこのサーバを理解するため少し手間がかかるバイナリーダウンロードから導入する方法を紹介します。
尚、今回は既存のサイトをcaddyで設置するやり方ですが、新規サイトであればSSL接続の鍵の取得などを無償のLet’s Encryptから自動取得してくれます。通信スレッドはマルチスレッドタイプです。わかりやすい。※現在既にバージョンがCaddy V2になってますので設定の記述変更がかなりあります。後半の記事に最新インストール情報があります。また最新設定がここに最新設定方法がありますを参考にしてください。
バイナリーパッケージのダウンロード
1 2 3 4 5 6 |
# cd /usr/local/src # mkdir caddy # wget https://github.com/mholt/caddy/releases/download/v0.11.0/caddy_v0.11.0_linux_amd64.tar.gz # tarx xvfz caddy_v0.11.0_linux_amd64.tar.gz # ls caddy caddy_v0.11.0_linux_amd64.tar.gz CHANGES.txt EULA.txt init LICENSES.txt README.txt |
バイナリーパッケージを配置し実行環境を作る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# cp caddy /usr/local/bin # setcap cap_net_bind_service=+ep /usr/local/bin/caddy # mkdir /etc/caddy # mkdir /etc/ssl/caddy # mkdir /var/log/caddy # useradd caddy # vi /etc/passwd caddy:x:994:991:Caddy web server:/var/lib/caddy:/sbin/nologin # vi /etc/group caddy:x:991: # chown caddy.caddy /etc/ssl/caddy <--取得済みのSSL鍵はここにドメイン名フォルダーを作り設置する。 # chown caddy.caddy /var/log/caddy # chmod 774 /var/log/ |
caddy起動をsystemdに登録する
caddyサーバの15,16行目の実行ユーザとグループを指定します。22行目を編集します。-quic追加とcaddyプロセスログファイルの出力先を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# wget https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service # mv caddy.service /etc/systemd/system # vi /etc/systemd/system/caddy.service [Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] Restart=on-abnormal ; User and group the process will run as. User=caddy Group=caddy ; Letsencrypt-issued certificates will be written to this directory. Environment=CADDYPATH=/etc/ssl/caddy ; Always set "-root" to something safe in case it gets forgotten in the Caddyfile. ExecStart=/usr/local/bin/caddy -quic -log /var/log/caddy/cady_process-stat.log -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp ExecReload=/bin/kill -USR1 $MAINPID (途中省略) # systemctl daemon-reload <----- systemdのサービスunitへ登録する。登録時はdisableの状態。 |
caddy設定ファイルを作成する
www.testserv.netでhttps接続のListenや設定情報は以下のように行います。下記はWORDPRESSの場合の記述例になります。
予め、selinuxはOFFにしておきましょう。caddyは比較的デバッグ情報が寡黙の傾向にあるのでくだらないことで悩まず最初は「setenforce 0」で無効。
きちんとWEBサーバとして動いたら、「setenforce 1」で影響がないか確認すると良いと思います。
尚、この設定でQualisのSSLテスト評価で「A+」取得できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
www.testserv.net:443 { tls /etc/ssl/caddy/www.testserv.net/full.crt /etc/ssl/caddy/testserv.net/server.key root /var/httpd/vhosts/www.testserv.net gzip log /var/log/caddy/cady-accesslog { rotate_size 50 rotate_age 5 rotate_keep 4 rotate_compress } errors /var/log/caddy/caddy-errors { rotate_size 50 rotate_age 5 rotate_keep 4 rotate_compress } header / { Strict-Transport-Security "max-age=31536000; includeSubdomains" X-XSS-Protection "1; mode=block" X-Content-Type-Options "nosniff" X-Frame-Options "DENY" } fastcgi / 127.0.0.1:9000 php rewrite { r /uploads\/(.*)\.php to \ } rewrite { if {path} not_match ^\/wp-admin to {path} {path}/ /index.php?{query} } } |
php-fpmの設定
1 2 3 4 5 6 7 8 9 10 11 |
# yum install php7.2-fpm --enablerepo=remi,remi-php7.2 # cd /etc/php-fpm.d # vi www.conf user = caddy group = caddy listen = 127.0.0.1:9000 # systemctl restart php7.2-fpm |
caddyを起動する
1 2 3 4 |
# systemctl enable caddy # systemctl start caddy # ps -e | grep caddy 22402 ? 00:00:05 caddy |
トラブルシューティング
うまくcaddyが起動できていない場合は、おおよそlogのディレクトリパーミッション、SSL鍵のディレクトリパーミッションが原因のケースが多い。caddyユーザに設定してサーバを起動することは、ログディレクトリがデフォルトでrootユーザ、rootディレクトリならば、パーミッションやグループの検討の余地が必要。本格的にやるならばログを開放するのは危険なので/caddy/logディレクトリ等を作った方が良いのかもしれないと思います。 あるいはログファイルなら予め0サイズのログファイル名をtouchコマンドで作っておくことをお勧めする。 「journalctl -xe」を実行して調べてみると良い。また、firewalldやiptablesでportが開放されているかチェックし、開放されてなければ該当portをオープンにしましょう。
※まだまだ発展途上なところがありますが、個人的には大変気に入りました。設定がシンプルで少ない設定で動かせるところが良いと思います。当社でもApache2.4からこのサーバに切り替えて使っています。
最新yumパッケージインストール for CentOS7/RHEL7
1 2 3 |
yum install yum-plugin-copr yum copr enable @caddy/caddy yum install caddy |
最新yumパッケージインストール for CentOS8/RHEL8
1 2 3 |
dnf install 'dnf-command(copr)' dnf copr enable @caddy/caddy dnf install caddy |