HTTP/2 対応の WordPress サイト設定メモ【Nghttp2 (nghttpx) + CentOS 7】

2015年4月30日  カテゴリー:Linux  タグ: , ,
Pocket
LINEで送る

Nghttp2 のプロキシー nghttpx を使って、HTTP/2 対応の WordPress サイトを設定した時のメモです。nghttpx は、HTTP/2 リクエストを HTTP/1.1 などのリクエストに変換してくれる、便利なプロキシーです。今回は、フロントエンドで HTTP/2 リクエストを nghttpx が受け取り、 バックエンドのWEBサーバ(Apache)に、HTTP/1.1リクエストを送信する構成で設定してみました。

nghttpx には色々な動作モードがあり、今回設定するリバースプロキシーとして使えますし、クライアントプロキシーとしても動作します。詳細は、Nghttp2 の開発者 tatsuhiro-t さんが「http2.0 - HTTP/2 & SPDY プロキシー nghttpx を使う - Qiita」で、分かりやすく解説されています。

構成図

nghttpx と Apache は、同じサーバで稼働させます。
nghttpx-01

Nghttp2(nghttpx)のインストール

サーバOSは、CentOS7.1.1503 です。こちらの手順でインストールしています。

・nghttp2 が必要とするライブラリのインストール

・nghttp2 のダウンロード(2015年5月18日更新)
※頻繁にバージョンアップされているようです。ダウンロードの前に最新リリースを確認しましょう。
https://github.com/tatsuhiro-t/nghttp2/releases/latest

・nghttp2 のインストール

/usr/local/bin/ 下に、「nghttpx」などの Nghttp2 のコマンド群がインストールされます。

SSLサーバ証明書(自己署名)の作成

Google Chrome や Firefox など、主要なWEBブラウザが、HTTP/2 接続には HTTPS 暗号化通信を必須としているため、SSLサーバ証明書が必要になります。

(2015年12月15日追記)正規の認証局が発行した、サーバー証明書を無料で取得できるようになりました。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

・秘密鍵の作成

・CSR(証明書署名要求)の作成

・SSLサーバ証明書の作成(有効期限10年)

・秘密鍵とSSLサーバ証明書を適切な場所に移動

・セキュリティ確保のため nghttpx の実行ユーザ「nghttp2」を作成

・秘密鍵とSSLサーバ証明書のオーナーを「nghttp2」ユーザに変更

・CSRを削除

nghttpx の設定

・ログファイルの保存先を作成
mkdir /var/log/nghttpx

・nghttpx の設定ファイルを作成します。
mkdir /etc/nghttpx/
vi /etc/nghttpx/nghttpx.conf

※当然ですが行末にスペースが入っていると、正しく動作しません。これが原因で、小一時間ほど悩みました。

nghttpx の起動スクリプト作成

・nghttpx 用の systemd設定ファイルを作成します。
vi /etc/systemd/system/nghttpx.service

・上記設定を systemd に反映

・systemd に反映されているか確認

・起動

・自動起動設定

・「nghttp2」ユーザで、nghttpx が実行されているかを確認します。

nghttpx のログローテーション設定

・ログローテーションの設定ファイルを作成します
vi /etc/logrotate.d/nghttpx

・確認します

バックエンド WEBサーバ(Apache)の設定

・「X-Forwarded-For」を、出力できるログフォーマット「x-combined」を追加します。
vi /etc/httpd/conf/httpd.conf

・WordPress 用のバーチャルホストを追加します。
ServerName や DocumentRoot は、ご自分の環境に合わせて設定してください。CustomLog のログフォーマットは、上で追加した「x-combined」を指定します。また、環境変数「HTTPS on」を設定しておきます。(WordPress がこの値を参照します)
vi /etc/httpd/conf/httpd.conf

動作確認

「https://<アドレス>:3000/」に、HTTP/2 対応のWEBブラウザで接続すると、HTTP/2 プロトコルを使って通信していることが確認できます。Safari など、HTTP/2 に対応していないWEBブラウザの場合は、自動的に nghttpx が HTTP/1.1 を使って通信してくれます。
nghttpx-02

※サーバに接続できない場合は、firewallでブロックされているかもしれません。以下のコマンドで3000/tcp の接続を許可しておきましょう。

(2015年5月18日追記)
WordPress の管理画面にも、問題なくログインできます。ありがとうございました!(^^)
nghttpx-05

終わりに

2015年4月27日、HTTP/2 のRFC番号が、RFC7540 (HTTP/2)、 RFC7541(HPACK) に決まったようです。RFCの文章化が目前ですね!

スポンサーリンク
Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です