目次
はじめに
NGINXに移行したきっかけ
結果
チューニング
まとめ
はじめに
このブログのWEBサーバーはレスポンスヘッダーを見て頂ければわかる通りNGINX(エンジンエックス)を採用しています。
NGINXとは処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されているWEBサーバーです。
でも皆さんWEBサーバーと言えば代表的なApacheを思い浮かべるのではないでしょうか?
WEBで検索をしてもApacheの情報の方が良く出てくるような気がします。
そしてWordPressもApache上で動かすことを前提に開発されています。
実はこのブログも2018年12月まではApacheで配信を行っていました。
NGINXに移行したきっかけ
このブログは今の所アクセス数も少ないので正直Apacheでも問題はなかったのですがサーバーの記憶媒体をHDDからSSDに換装する際に誤ってHDDのシステムデータを破壊してしまい急遽システムを一から再構築せざるを得なくなりどうせならと今後の事も考え性能の良いNGINXへ切り替えました。
売り上げランキング: 1,284
自分はこのSSDをタイムセールで安くなった時に2つ購入してRAID1で現在運用しています。
サーバーなんて正直容量120GBもあれば十分です。
NGINXを導入しようと思ったきっかけ
・ページ表示速度をより早くしたい
・一度により沢山のリクエストをさばきたい
・サーバーの負荷を抑えたい
くらいですかね?また後日何か思い出したら追記します。
結果
ApacheからNGINXに移行した結果を先に述べると大正解でした。
一切チューニングを施していないNGINXサーバー上で動くWordPressは体感できるほどApacheの時より早くなりました。
それから数日かけてじっくりチューニングしたところ最大4倍の高速化に成功。恐るべしNGINXです。
Apacheサーバーでは早くて1秒以上遅いときには2秒以上かかっていたページの表示速度がブラウザキャッシュが無い状態でトップページの表示速度が約0.7秒前後
ブラウザキャッシュが効いた状態だと約0.2秒前後でページの表示が可能となりました。
(※回線速度、クライアントのスペックに影響されます。計測環境は100Mgbp回線下のノートパソコンからWeb担当者Forum版 ページ速度分析ツールで計測)
PageSpeed Insightsの結果も
パソコン 80点前半→90点以上
モバイル 40点前後→50点前後
調子の良いときは99点を出す事もあります(Google Analyticsを抜けばパソコンは満点でしょう)
これはクローラー(Google Bot)がページのダウンロードにかかった時間を示したグラフになります。
(旧Google search consoleから参照可能です)
このグラフで真ん中より左側がApacheサーバーを使用していた時のダウンロード時間で平均940ms、右側がNGINXのダウンロード速度で平均375msとなっています。
真ん中の大幅に時間がかかっているのはメインサーバー停止時に応急でraspberry piでWordPressを動かしていた為です。
Googleはダウンロード時間が500msを超えるページを「遅いページ」と判断し、検索結果にも影響するようです。
この基準だとApacheで運用していた時は完全に遅いページに分類されてSEO的にも良くなかったはずです(全然チューニングしていなかったからApacheでもチューニングすればもう少し早くなるはずです)
対してNGINXではチューニングを施す前から300ms台なのでGoogleは早いサイトとして認識してくれているはずです。事実NGINXに移行して以来検索結果の順位が上がりました。
NGINXへ移行と同時に記憶媒体もHDDからSSDに換装したのでこの恩恵も含まれていると思いますが。特にHDDではしばらくアクセスがなかった時からの初回アクセスが遅かったのがSSDに換装して改善されました。
チューニング
次はWordPress用にチューニングです。
今回行ったチューニングは以下の通り
・NGINX,PHP,MySQL設定の見直し
・gzip
・OPcache
・FastCGIキャッシュ
・MySQLクエリキャッシュ
覚えているのは大体これくらいです。
「gzip」
ファイルを圧縮する方法の1つです。ウェブページのサーバーとユーザーのパソコン間で通信しているデータサイズを少なくするのがgzip圧縮の効果。サイズが小さくなることで、ページの表示がより高速になることはもちろん、転送量が減るのでレンタルサーバーなどによっては料金の節約にも繋がります。
体感速度的には正直あんまり分からないけどページスピードの計測サイトなどのスコアは上がります。
「OPcache」
PHPのコードをコンパイルし共有メモリへ保存しておく仕組みのことです。 PHPはインタプリタですが、この仕組みによってリクエストごとにスクリプトを読む必要がなくなり、パフォーマンスの向上するらしいです。
もう一つPHP関連のキャッシュと言えばAPCuがありますがこちらはまだ未導入です。(むしろ遅くなるって言ってる人もいるので要検討)
「FastCGIキャッシュ」
特にFastCGIキャッシュの有効化は体感速度システム負荷ともに大きく改善されました。
FastCGIキャッシュとはアクセスに対して毎度PHPを実行するのではなく、一度実行した結果を指定された時間キャッシュし、その時間内にアクセスがあった場合キャッシュしておいたものを返すという仕組みです。
なので勿論ですがページの表示体感速度は速くなりますし、サーバーへの負荷も軽減されます。
FastCGIキャッシュを設定する前はABコマンドで負荷をかけるとすぐにCPU使用率が上昇していましたが設定後はどれだけ負荷をかけても使用率はほぼ0%です。上がって10%くらい。
FastCGIキャッシュの注意点としてはWordPressは動的なサイトです。なのでサイトを更新した際にはキャッシュを削除しないと反映されないので更新のたびに削除作業が必要となります。
私はWordPressの管理画面から1クリックで削除出来るように設定してあるので大した手間には感じないです。
「MySQLクエリキャッシュ」
一応設定しておいてキャッシュヒット率は80%超えてるので良いのではないでしょうか。
テーブルが更新されるとキャッシュもクリアされるので古くなったデータは返しません。
ただし、キャッシュヒット率が低い場合はむしろ無効の方が良い場合もあるらしいので自分の環境に適したチューニングを施す必要性がありそうです。
でこの記事書いてる時に調べなおしてたらこんなの見つけたんだけど…
The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0.
(クエリキャッシュは5.7.20で非推奨に、8.0で削除されます。)
https://dev.mysql.com/doc/refman/5.7/en/query-cache.html
え??確かにデフォルトは無効だったわ…
まとめ
ApacheからNGINXへ移行したのは大正解でした。ただチューニングは奥が深そうです….
※あくまで素人が書いてる記事なので間違いとかあったらごめんなさい