HTTP/2時代のnginx+WordPress運用

この記事は nginx Advent Calendar 2015 ・ WordPress Advent Calendar 2015 の24日目のエントリです。

どうも、やまけんです。一度はIT系なAdvent Calendarでも書いてみようかなと思ってたんですが、まだnginxとWordPressに空きがあったので、投稿することにしました。


もくじ

  • HTTP/2 使っていますか?
  • HTTP/2 とは
  • WordPress+nginx+HTTP/2で必要なもの
  • 設定しよう

HTTP/2使ってますか?

新しもの好きな私は、早速導入しました。皆さんご覧いただいているこのページもHTTP/2対応ブラウザから見れば、HTTP/2にてブラウジングができているのがわかります。

h2_1

h2_2

HTTP/2 とは

詳しい説明あたりはWikipediaの

HTTP/2 – ウィキペディア
https://ja.wikipedia.org/wiki/HTTP/2

あたりに譲りますが、導入メリットとして

  • 単一のセッションで複数のリクエストを送受信する
  • すなわちリクエストとレスポンスのパイプライン化
  • バイナリベースのやり取りのため、テキストベースと比べ容量削減効果が大きい

特に最後の部分はヘッダ部分における転送容量の削減やHTTP1.0の頃のように複数のCSSやJSを結合して容量削減などを計る必要が少なくなります。

一部デメリットとしてSSL必須というのが言われていますが、現状は互換性維持のために行われているだけであって、規格上は必須ではないですし、これも長期的な時間の解決によって、過去のものになる可能性も。

また、Googleも常時SSLを推奨という状況からも、SSL対応のついでにHTTP/2化しておくのが良いかと思います。

Google ウェブマスター向け公式ブログ: HTTPS をランキング シグナルに使用します
googlewebmastercentral-ja.blogspot.jp/…/https-as-ranking-signal

WordPress+nginx+HTTP/2で必要なもの

では、ここからは具体的な構築方法などに移ります。

  • nginxで稼働しているWordpress
  • SSL証明書
  • WordPress HTTPS (SSL) プラグイン

これらを用意しセッティングをしていきます。

nginxで稼働しているWordpress

これがなければ今回のお話になりません。
当方の環境ではさくらのVPS 2G SSDプラン上のUbuntu14.04 LTSに、nginx.orgのMainlineから1.9.9をインストールして使っています。

nginxのHTTP/2は1.9.5以降対応ですのでStableな1.8系だと対応不可になります。

構築方法については
Ubuntu 14.04LTSでWordPressを使うまでのメモ
を参考までに。

余談ですが、2015年12月28日12:00まで、さくらのVPS石狩リージョン初期費用最大0円キャンペーンやってますので、是非とも申し込んでください。

さくらのVPS」石狩リージョン提供再開およびキャンペーン開始のお知らせ | さくらインターネット
http://www.sakura.ad.jp/news/sakurainfo/newsentry.php?id=1120

SSL証明書

動作検証程度であればオレオレ証明証でも良いですが、外向けに公開するなら、きちんとしたブラウザ検証できるSSLを購入しましょう。別にVeriSignである必要もなくComodoやRapidSSLなどで十分です。私は、さくらのSSLにてRapidSSLを3年分で買いました。

一つ言うとすれば、現状SHA-1の証明書はMSや各ブラウザメーカーが今後非推奨としていきますので、SHA-2(SHA-256)の証明書を取得しましょう。

SSL証明書をSHA–1からSHA–2に更新する際にはご注意を! – さくらのナレッジ

また余談ですが、2016年1月13日まで、さくらのSSLのRapidSSLが今だけ1年分0円(さくらのVPSなどサービス利用者のみ対象)キャンペーン中ですので、さくらのVPS契約ついでにSSL証明書も取りましょう。

ラピッドSSL提供開始記念キャンペーン! | さくらインターネット
http://www.sakura.ad.jp/campaign/rapid_ssl/

WordPress HTTPS (SSL) プラグイン

一応WordPress2.6以降、管理画面のSSL対応や4.0以降は常時SSL環境の対応などとはなっているのですが、それでもテーマ画像のパス変更など細かな修正が必要な部分が多いので、SSLに対応するプラグインを導入するのが手っ取り早いです。

そこで紹介するのが

WordPress HTTPS (SSL)
https://wordpress.org/plugins/wordpress-https/

上記のプラグインになります。最近メンテナンスされていなく4.0以降は動作検証もされてはいませんが、今のところ不具合なしなので使い続けています。

設定しよう

nginx側の設定

まずはSSL設定に関してですが、この辺はSSL3の脆弱性問題など2015年の話題に事欠かなかった部分でもあるので、こちらの記事を参考にすると良いと思います。

nginx – 我々はどのようにして安全なHTTPS通信を提供すれば良いか – Qiita
http://qiita.com/harukasan/items/fe37f3bab8a5ca3f4f92

それでは設定

/etc/nginx/conf.d あたりに default_ssl.conf があればこれを編集しましょう。なければ default.conf などをコピーして利用しましょう。

/etc/nginx/conf.d/default_ssl.conf

server {
    listen 443 ssl http2;←http2を利用することを明示
}

HTTP/2に関する設定そのものは、これだけです。
すでにSSLなサイトで運用していれば、これだけで終わります。
あとはSSLがらみの設定のみ。私の設定を晒しておきます。

/etc/nginx/conf.d/default_ssl.conf

    ssl_certificate      サーバー証明書と中間証明書を統合したファイルのパス.crt;
    ssl_certificate_key  秘密鍵のパス.key;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout  10m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #互換性の為TLS1.0以上にしてます

    ssl_ciphers  "ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS"; #結構厳しめの設定です。IEなXPは死にます。

    ssl_prefer_server_ciphers on; #サーバー側で暗号化スイートの順番を決める
    ssl_dhparam /etc/nginx/dhparam.pem; #DH暗号化のパラメーターファイル

# OCSP Stapling関連

     ssl_stapling on;
     ssl_stapling_verify on;
     ssl_trusted_certificate /etc/nginx/rapidssl.pem; #ルート証明書と中間証明書を結合したファイル
     resolver 133.242.0.3 133.242.0.4 [2401:2500::1] valid=300s; #OCSP Responderの名前解決に使うDNS。サーバー上位のDNSサーバーを参照すればよし
     resolver_timeout 10s;

#HSTS対応。ドメイン全体が常時SSLと明示することで、無駄なHTTP接続を減らす意図

     add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";

秘密鍵ですが、作成時にパスワードを設定するのですが、そのままだとnginxやサーバーそのものを再起動する際に秘密鍵のパスワードを求められて停止したまま起動しなくなるので、あらかじめパスワードを除去しておくとよいです。

openssl rsa -in 秘密鍵.key -out パスワード除去後の秘密鍵.key

みたいな。

WordPressの設定

紹介した WordPress HTTPS (SSL) プラグインをインストールし設定するのですが、特に難しいものはなく、ドメインとチェックをつけるだけです。

スクリーンショット 2015-12-23 12.48.57

忘れがちなのが、WordPressそのもののドメインをhttpsに変えておく作業。

スクリーンショット 2015-12-23 12.49.33

このように、難しいのは常時SSL環境の構築ぐらいで、それさえ対応できれば、あとは http2という1文字加えるだけで、簡単にできちゃいます。

検索ランクなどでも常時SSLというのはモバイル対応に並んで影響が大きい(過去、みさきまぐろ切符のエントリー)の際にgoogle検索のトップページに表示されるようになり、こんなブログですら毎時1万アクセスという謎記録が出たこともあるので、SSL対応のついでにやってしまうのが良いかと。

特に、画像を多用するテーマや記事の場合、セッション数の減少と転送量削減からサーバーパフォーマンスが向上するという状況にもなるので、ぜひともお勧めします。

Enjoy!

コメントを残す

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