マルチサイトのWordPressをnginx+PHP-FPMで動かす

Apacheよりもnginxが性能がよさげという話を聞いたので、マルチサイトで運用しているこのサイトでも導入してみました。

ここではその手順を記録しておきます。

スポンサーリンク

各種ソフトウェアのインストールと設定

PHP-FPM

環境によってはバージョンを指定してインストールする必要があります。

設定ファイルは/etc/php-fpm.d/www.confです。

以下の箇所をそれぞれ修正します。

メモリの制限が厳しい場合は

pm.max_children

pm.max_spare_servers

あたりの設定を小さくします。

pm.max_requests

を設定しておけばメモリリークがある場合でも問題が起きにくくなります。

nginx

設定ファイルは/etc/nginx/conf.d/ディレクトリに置きます。

このページを参考に設定ファイルを作成します。

例えばsample.confファイルを作成して以下のような設定を記述します。

設定内のdhparam.pemファイルは以下のコマンドで生成できます。

W3 Total Cacheを使用している場合は、後でW3 Total Cacheが吐き出す設定ファイルをincludeする必要があります。

この段階ではまだファイルがないためコメントアウトしてあります。

またW3 Total Cacheのブラウザキャッシュの設定ではsimplicityで使用されているフォント拡張子woff2が入っていないため、上記の設定では別途追加しています。

robotx.txtやsitemap.xmlのための設定も追加します。

設定が正しいかどうかは以下のコマンドで確認できます。

正しい場合は以下のように表示されます。

権限の設定

今までapacheで動かしていたため、WordPressのファイルの所有者はapacheになっていました。

今回はphp-fpmのユーザーをnginxに設定したため、WordPressの所有者をnginxに変更します。

アプリケーションの停止

nginxも同じポートを使用するため、先にApacheを停止する必要があります。

ついでにサーバー起動時に起動する設定をオフにします。

アプリケーションの起動

インストールと設定を行ったアプリケーションを起動します。

ついでにサーバー起動時に起動するように設定します。

アクセスしてみる

実際にアクセスしてみてください。

うまく表示されない場合は、パーミッションや所有者を確認してください。

W3 Total Cacheを使用している場合

ネットワーク管理者からW3 Total Cacheのダッシュボードにアクセスするとwp-admin/network/nginx.confが吐き出されます。

実際にあることを確認したら/etc/nginx/conf.d/に作成した設定ファイルをもう一度編集します。

先ほどコメントアウトした部分のコメントを外します。

保存したら設定を反映させます。

httpsの設定

上記のnginxの設定はhttpsを利用する場合の設定です。

必要ない場合は以下の修正を行います。

  1. 4つあるserver設定のうち2番目と3番目を消す
  2. 1番目のserver設定のhttpsをhttpに変更
  3. もともと4番目のserver設定を変更
    1. 443を80に変更
    2. sslから始まる項目を削除
    3. add_headerの項目を削除

httpsの設定をした場合は、こちらのサイトでsslの設定の評価を見ることができます。

A comprehensive free SSL test for your public web servers.

今回の設定ではA+になりました。

https

結果

もともとApacheの方でもキャッシュされたページは応答が早かったので、体感できるほどの違いはありませんでした。

そこでabコマンドで計測してみました。

リクエスト数1000、同時接続数100を3回行ったRequests per second(1秒間に処理したリクエスト数)の平均です。

Apache nginx+PHP-FPM
94.10 97.40

ほんの少しですが良くなりました。

まとめ

W3 Total CacheでページキャッシュされたページはWordPressの処理を通らないで生成されたファイルが配信されるため、nginx+PHP-FPMにすると速度が改善される可能性が高いです。

ページキャッシュを導入している方で少しでも速度改善したい方は、検討してみても良いかもしれません。