H2Oの勉強がてらブログのアーキテクチャをApache + mod_phpからH2O + php-fpmの構成に変えてみました。ということで今回は移行に関する備忘録。

移行前の構成

  • OS: CentOS 6.7
  • Apache:
    • Version: 2.2.15 (Unix)
    • MPM: Prefork
  • PHP: 5.6

恥ずかしいことにApacheは脆弱な状態でした↓…あぶね

IPA 独立行政法人 情報処理推進機構:ウェブサーバ「Apache HTTP Server」の脆弱性(CVE-2011-3192)について

H2Oのインストール

rpmのものをインストールします。

以下のリポジトリを追加。

で以下インストール

旧構成のApacheのhtaccessの設定

基本的に以下の目的を達成するために記載しています。

  1. 旧パスでのアクセスは新パス(パーマリンク)にリダイレクトされる
  2. HTTPSでのアクセスはHTTPにリダイレクトされる。
  3. HTTPでのアクセスは/blog/index.phpに内部リダイレクトされる

1はもう無くても良いためH2Oには設定しません。2は全面HTTPSにするためリダイレクトも必要ありませんが、HTTP→HTTPSへの強制リダイレクトを行い、さらにパーマリンク対応である3の/blog/index.phpへの内部リダイレクトもするような設定を行います。

H2Oの設定

ということで、/etc/h2o/h2o.confは以下の通り

handler.rb

php-fpmのインストール&設定

phpは5.6を利用

/etc/php-fpm.d/www.confではlistenポートをUNIXドメインソケットに変更してます。

WordPressの設定

設定>一般から、WordPressアドレスとサイトアドレスのURLをhttpsにします。

h2o-wordpress-setting

さらに、SearchRegexのプラグインを入れて、http://{Domain}になっている部分を一括置換します。

ブラウザでの確認

Apacheだとロードはこんな感じ。同時接続数6が効いちゃってます。

wordpress-apache-timeline

h2oだとロードはこんな感じ。HTTP/2が効いて同時リクエストをしているのが確認できます。

wordpress-h2o-timeline

ベンチマーク

wrkでベンチマークをとってみました。Apacheは以下のような設定です。

Apache: php+内部リダイレクトなパーマリンクページ

Apache: 静的ページ

続いてはH2O。

H2O: php+内部リダイレクトなパーマリンクページ

H2O: 静的ページ

平均的に良くなっている感じです。

ちなみにApacheの方でKeepAlive Offにすると激遅で、静的ページすらスループットが出ずという結果でした。3way handshakeのオーバーヘッド恐るべし。

ハマりどころ

H2OでHTTPSでアクセスしているのにChrome Developer ToolでProtocolがHTTP/1.1のまま変わらず…。AVAST!のSSLインタラプトして内容を解析する機能が原因でした。以下のようにチェックを外せばOK。

avast-webshield

参考URL