この記事は 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にてブラウジングができているのがわかります。
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) プラグインをインストールし設定するのですが、特に難しいものはなく、ドメインとチェックをつけるだけです。
忘れがちなのが、WordPressそのもののドメインをhttpsに変えておく作業。
このように、難しいのは常時SSL環境の構築ぐらいで、それさえ対応できれば、あとは http2という1文字加えるだけで、簡単にできちゃいます。
検索ランクなどでも常時SSLというのはモバイル対応に並んで影響が大きい(過去、みさきまぐろ切符のエントリー)の際にgoogle検索のトップページに表示されるようになり、こんなブログですら毎時1万アクセスという謎記録が出たこともあるので、SSL対応のついでにやってしまうのが良いかと。
特に、画像を多用するテーマや記事の場合、セッション数の減少と転送量削減からサーバーパフォーマンスが向上するという状況にもなるので、ぜひともお勧めします。
Enjoy!