SEO対策とセキュリティで企業をバックアップします。

ITエンジニアの技術力UPをお約束します。

Caddy 高速WEB サーバ(http2 quic対応) on CentOS7

Caddy 高速WEB サーバ(http2 quic対応) on CentOS7


http2対応の高速サーバを今回扱ってみる。このサーバはGo言語で開発されたWEBサーバです。導入にはコンパイルから行う場合はGo言語開発環境が必要ですが
バイナリーから入れるのであれば、特にGo言語開発環境は必要ありません。導入方法は幾つかやり方があります。一番簡なのはCentOS7の場合ならepelレポジトリー
から導入するのが簡単です。今回はこのサーバを理解するため少し手間がかかるバイナリーダウンロードから導入する方法を紹介します。
尚、今回は既存のサイトをcaddyで設置するやり方ですが、新規サイトであればSSL接続の鍵の取得などを無償のLet’s Encryptから自動取得してくれます。通信スレッドはマルチスレッドタイプです。わかりやすい。

バイナリーパッケージのダウンロード

# 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

バイナリーパッケージを配置し実行環境を作る。

# 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プロセスログファイルの出力先を変更します。
# 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+」取得できました。

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の設定

# 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を起動する

# 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からこのサーバに切り替えて使っています。

タグ: , , , ,