CentOS7/CentOS6 共通h2o HTTP/2対応Web サーバのインストール with WORDPRESSで動かしてみる。
2019/07/16
2019/12/27
タグ: CentOS6, CentOS7, h2o, http2, WEBサーバ, WORDPRESS, 高速
h2oサーバの導入の動機
h2oを使ってみようと思った理由はHTTP/2.xで通信できることかな。最近のGoogle検索順位は早さも大切な評価ウェイトをしめているためサイトの速度アップは重要なことです。
このHTTP/2.xのプロトコルはHTTPS通信において表示速度を向上させ並列してリクエストを処理できるため、表示速度が向上します。
Nginxも早いのですが、H2OはそのNginxを凌ぐ早さで表示できるようです。通信スレッドはマルチプロセス・マルチスレッド方式です。CPUのコア数に合わせてnum-threadsを設定すれば良いようだ。
h2oのレポジドリーの追加
h2oのインストールはCentOS7/CentOS6で共通です。基本はyumのレポジトリーに以下の記述を追加し保存するだけでyum経由でレポジトリー からのインストールが可能になります。
1 2 3 4 5 6 7 8 9 10 11 |
# vi /etc/yum.repos.d/bintray-tatsushid-h2o-rpm.repo [bintray-tatsushid-h2o-rpm] name=bintray-tatsushid-h2o-rpm #If your system is CentOS baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/ #If your system is Fedora #baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/fedora/$releasever/$basearch/ gpgcheck=0 repo_gpgcheck=0 enabled=1 |
h2oのインストールと起動
h2oを実際にyumを使ってインストールし、起動する手順になります。
1 2 3 4 5 6 7 8 |
# yum update # yum install h2o CentOS6の場合 # service h2o start CentOS7の場合 # systemctl start h2o |
ユーザh2oの作成とドキュメントルート作成&WORDPRESSの設置
1 2 3 4 5 6 7 8 |
mkdir /opt/html useradd -d /opt/html -s /sbin/nologin -g 88 -u 88 h2o chown h2o.h2o /opt/html cd /opt/html wget https://ja.wordpress.org/latest-ja.zip unzip latest-ja.zip mv wordpress content1 chown -R h2o.h2o /opt/html/content1 |
SSL & WORDPRESSを動かす際のコンフィグレーション例(h2o.conf)
今回はSSLを使ってh2o環境でWORDPRESSを動かすケースのh2o.confを挙げてみたいと思います。
let’s encryptを使ってSSLライセンス取得し、実験してみました。Let’s Encrypt取得のやり方はここ
ドキュメントルートに/opt/html/content1として、実行ユーザはh2oユーザを新たに作り設定しています。
nginxにも似ている書き方にも感じますが、インデントで設定の範囲がきまるので注意しましょう。
尚、fastCGIをh2oは直接管理できるので通常行うようなfastCGIの設定は不要です。
SSL証明書の項目設定の中でCAファイル(認証局証明、中間証明等)を設定する箇所はありません。
従ってサーバ証明書とCAファイルはcatコマンドで結合を行ってください。結合後に結合ファイルの終点と開始点の間に改行が正しく入っていなかったらエラーになりますので必ず結合の後にチェックが必要です。
最初にサーバ証明書が来るようにするのがポイントです。尚、LetsEncryptの場合fullchain.pemが既に結合されたものです。
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 38 |
# cd /etc/h2o # vi h2o.conf user: h2o max-connections: 250 num-threads: 2 access-log: /var/log/h2o/access_log error-log: /var/log/h2o/error_log pid-file: /var/h2o.pid http1-upgrade-to-http2: ON http2-reprioritize-blocking-assets: ON header.add: "Strict-Transport-Security: max-age=31536000" file.index: [ 'index.php', 'index.html' ] hosts: "fox.sample.red": gzip: ON listen: 80 listen: port: 443 ssl: minimum-version: TLSv1 certificate-file: "/etc/letsencrypt/live/fox.sample.red/fullchain.pem" key-file: "/etc/letsencrypt/live/fox.sample.red/privkey.pem" cipher-preference: server cipher-suite: "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:!DSS" paths: "/": file.dir: /opt/html/content1 redirect: url: /index.php/ internal: YES status: 307 file.custom-handler: extension: .php fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /usr/bin/php-cgi" fastcgi.timeout.keepalive: 10000 |
おまけ:ソースからのh2oコンパイル
CentOS6.10のデフォルトのgccバージョン(4.4.7)では宣言エラー(同じ関数名で異なるタイプ宣言)が出てしまいました。しかしHomebrewで導入しているgccのバージョン(5.5.0)では 問題なくコンパイルが完了しました。gccバージョン毎のプロトタイプ宣言の解釈と処理の違いがあるようです。尚centOS7,centOS8では簡単にコンパイルできます。ライブラリーが足りないと途中出てきますが2つほどマニュアルでライブラリー追加すれば問題ありません。Ubuntu系の最新バージョンではソースコード中のUINT_MAXをUINT8_MAXに置き換える作業がありましたがこちらもすんなりコンパイル出来ます。
1 2 3 4 5 6 7 8 9 |
$ cmake --version cmake version 2.8.12.2 $ gcc --version gcc (Homebrew gcc 5.5.0_4) 5.5.0 $ git clone https://github.com/h2o/h2o.git $ cd h2o $ cmake -DWITH_BUNDLED_SSL=on . $ make $ sudo make install |