CentOS8 も試しているのですが、あちらは Apache でも標準でHTTP/2に対応しているんですよね。しかしながら、CentOS7 収録の Apache では対応していないため Webサーバを入れ替えないと利用できない状態です。
以前に nginx で試したこともあるのですが、WordPress のパーマリンクが正常に動かない状況になってしまい、改善できなかったため移行を断念した経験があります。
今回、nginx と同等以上の性能を発揮するという噂の新進気鋭のWebサーバ H2O の導入を試して WordPress を動作させるところまでやってみました。
H2O のインストール
CentOS でのインストールに対応したリポジトリが公開されているため、手動でリポジトリを追加して yum でインストールしました。
# vi /etc/yum.repos.d/h2o.repo
リポジトリ情報を書き込みます。とりあえず常時利用はしないように enabled=0
にしましたが、1にしても問題ないかと。
[h2o]
name=bintray-tatsushid-h2o-rpm
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=0
パッケージ情報を検索してみます。
# yum search --enablerepo=h2o h2o
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 4.1 kB 00:00
* base: mirrors.cat.net
* epel: ftp.iij.ad.jp
* extras: mirrors.cat.net
* remi-safe: ftp.riken.jp
* updates: mirrors.cat.net
base | 3.6 kB 00:00
epel | 4.7 kB 00:00
extras | 2.9 kB 00:00
h2o | 1.3 kB 00:00
mariadb-main | 2.9 kB 00:00
mariadb-maxscale | 2.4 kB 00:00
mariadb-tools | 2.9 kB 00:00
mondorescue | 2.9 kB 00:00
remi-safe | 3.0 kB 00:00
updates | 2.9 kB 00:00
(1/3): epel/x86_64/updateinfo | 1.0 MB 00:00
(2/3): epel/x86_64/primary_db | 6.9 MB 00:00
(3/3): h2o/7/x86_64/primary | 7.8 kB 00:00
h2o 65/65
=============================== N/S matched: h2o ===============================
h2o.x86_64 : H2O - The optimized HTTP/1, HTTP/2 server
h2o-debuginfo.x86_64 : Debug information for package h2o
libh2o.x86_64 : H2O Library compiled with libuv
libh2o-devel.x86_64 : Development interfaces for H2O
libh2o-evloop.x86_64 : H2O Library compiled with its own event loop
Name and summary matches only, use "search all" for everything.
問題なさそうなのでインストール。
# yum install --enablerepo=h2o h2o
ログを取り損ねていたのですが必要なパッケージとまとめてインストールされます。
今までは Aapche を使っていたので、そちらを停止して H2O を起動します。ついでにサーバ起動時にも H2O が起動するように設定しました。
# systemctl stop httpd
# systemctl start h2o
# systemctl disable httpd
# systemctl enable h2o
以上でサーバの変更が終わり。Aapche の設定を引き継いで環境の移行を進めます。
WordPress を動かす設定 とか もろもろ
現在、このブログを動かしているサーバは、ほぼ WordPress の動作に専用化している向きもあるため、PHP-FPM と連携して WordPress を動かすための設定を行いました。
先日、サーバの PHP バージョンは 7.4 に上げているため、PHP 7.4.9 での動作になります。
設定ファイルは /etc/h2o/h2o.conf
です。
http2-reprioritize-blocking-assets: ON
file.index: [ 'index.html', 'index.php' ]
file.custom-handler:
extension: .php
fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /usr/bin/php-cgi"
hosts:
"www.u-1.net:443":
listen:
port: 443
host: 0.0.0.0
ssl:
minimum-version: TLSv1.2
certificate-file: "/path/to/the/certificate-file"
key-file: "/path/to/the/key-file"
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-ECDSA-AES128-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: /var/www/html/www.u-1.net
redirect:
url: /index.php/
internal: YES
status: 307
"www.u-1.net:80":
listen:
port: 80
host: 0.0.0.0
paths:
"/":
redirect:
status: 301
url: "https://www.u-1.net/"
細かい設定は省いていますが HTTPS 接続で WordPress を動かすならこの程度の設定ファイルの量で済むという。
今まで Apache では複数ファイルにまたいで設定ファイルを用意していたので、このすっきりさは驚きであります。
SSL 証明書の設定に注意
いわゆる中間CA証明書を使用している場合は、nginxと同様にサーバー証明書と結合して指定してやる必要があります。改行が含まれていないとエラーになるので、結合後、手動で修正する必要がありました。
私の場合は FUJISSL のサイト説明を参照して実施しました。
HTTP/2 でアクセスできているかのチェック
Firefox のアドオン HTTP/2 Indicator で動作チェックしてみました。

ついでに開発者ツールでレスポンスヘッダーを見てみます。設定を多少追加しているためいくつか情報が追加されていますが、1行目見れば分かります。
HTTP/2 200 OK
server: h2o/2.2.6
date: Sat, 05 Sep 2020 06:37:53 GMT
x-powered-by: PHP/7.4.9
expires: Wed, 11 Jan 1984 05:00:00 GMT
cache-control: no-cache, must-revalidate, max-age=0, max-age=86400
content-type: text/html; charset=UTF-8
link: <https://www.u-1.net/wp-json/>; rel="https://api.w.org/"
strict-transport-security: max-age=31536000
content-encoding: gzip
vary: accept-encoding
accept-ranges: none
X-Firefox-Spdy: h2
無事にWebサーバの切り替えに成功しました。
パフォーマンスはどうか?
体感としても結構速くなった気がします。PageSpeed Insights でも モバイルで 86、PC で 99 と高スコアです。モバイルの方は Google AdSense の広告コードがジャマをしている部分もあるので、致し方ない気もしますが、アドセンス表示の最適化などでもうちょっと詰められるかな?
Gmetrix では Add Expires headers が0点評価で残念無念。これはH2Oの設定ファイル内で mruby を使って適切にヘッダ情報を出力してやれば良さそうなのでそのうち対応したいと思います。
以上、やってみたらそんなに難しくなかった Webサーバの切り替え作業でした。
コメント