Nginx+php7へのWordPress移行で苦労した点まとめ
2018年05月28日
サイト運営に利用していたサーバを、サーバの運営に利用していたPleskの値上がりを受けて別のサーバへ移行しました。
サーバの環境もけっこう代わりました。
移行前の環境
php5+Apache
移行後の環境
php7+Nginx
すんなりサーバが移行できたわけでなくて、いろいろとトラブルも発生したので発生した問題点と、解決方法について備忘録として書いておきます。
1.サーバを移行しようと思った理由
これまで使用していたサーバの月額費用が、Pleskのライセンス費用で値上がりしたと、いってみればそれだけの理由です。
試算してみると、Plesk抜きのサーバへ移行すると月額2000円〜最大で3000円ほど(年額換算で3万円ほど)節約できる試算になったのでこのタイミングで移行することにしました。
2,移行したサーバ会社
ConohaのVPSに移行しました。
Conohaを決めた理由としては
- サーバに最新技術が導入されていてサイトの動作速度向上が期待できる
- Pleskは使えないが、Kusanagiコマンドで簡単にサイト設定を行うことができる
- 費用面でサーバのメモリを少なくすれば月額費用はかなり少なくてすむ
という点になります。
2.移行プロセス
カスタムパーマリンクが機能しない
まず、サーバ管理のソフトウェアをApacheからNginxに変更しました。
理由としては、速いから? よく分かりませんがそうしました。
そしてPHPのバージョンを7にしてみたのですが、これはうまく行かず、理由としては、WordPressのカスタムパーマリンクが上手く機能しなかったから。
URL/〜〜〜/〜〜〜/
上記のようなWordPress上で設定していたURL設定が機能せず、Not Foundとなる。
この解決方法がわからなかったので、別の方法を考えました。
(理由としてはNginxの設定だったのですが、最初は分かりませんでした)
Apache + HHVMを試してみる
結局サーバのNginxではだめだったので、HHVMでサーバを変更してみることにしました。
HHVMというのはPHPのバージョンの1つのようなものなのですが、NginxではなくApacheで動作します。
kusanagiだとワンボタンでサービスを変更できるので、変更してみたところ、問題なくサイトが機能した・・・ように見えました。
訪れる謎の高負荷と、サーバダウン
HHVM+Apacheは、HHVMのキャッシュに機能で動作が非常に高速で、サーバ移行前と比べると動作が高速化してめでたしめだたし・・・・かと思いました
が、数時間おきにサーバに謎の高負荷がかかりサーバダウンするという現象が起きました。
とりあえず応急処置としてこまめにHHVMの再起動設定
調べてみたところ、ConohaのKusanagiのHHVMは不安定でときどきダウンすることがあるということでした。
応急処置として、cron設定で1分ごとにHHVMを再起動するように設定しました。
これにより、仮にサーバがダウンしても長時間そのままダウンし続けるという自体は避けることができます。
原因はよく分からないのですが、とりあえず同様の現象の方はいたようで、またあくまで応急処置で、数時間に一度、数分程度サーバがダウンしてしまうということ自体が解消されたわけではなく、さすがにその状況でサーバを運営し続けることは品質面で問題といえます。
そこで、別の方法を検討することにしました。
すると、Nginxに切り替えると安定するということでした。
Nginx+PHP7に再度挑戦
最初にいったんやろうとしてあきらめたNginx+PHP7への移行に再度挑戦してみることにしました。
Conohaのサービスでは、サーバをイメージ保存しておいて、そのコピーのサーバを簡単に作成できるので、HHVMのサーバは残した状態で、コピーしたサーバを作成し、Nginxの設定に変更してテストを行いました。
こういうことがコントロールパネルから簡単にできるのも、Conohaの優れている点です。
カスタムパーマリンクの対応
まず、カスタムパーマリンクが動作しない点については、Nginxは.htaccessが使えないのでNginxの設定ファイルに記述しないといけないということでした。
Nginxの設定ファイルは、nginx.confというファイルに設定されているのですが、このファイルに正規表現を使って様々な記述がされていたので、この設定をサイトごとに設定しました。
この作業は少し手間がかかる作業でしたが、完了することで、無事パーマリンクが機能するようになりました。
PHP7で動作しないファイルの修正
次に、以前のサーバがPHP5で動かしていたので、PHP7になることで動作しないファイルが大量に出現したので、これらのエラーファイルを順に修正していきました。
エラー箇所の特定は、Nginxのエラーログファイルを見ながらエラー箇所を特定し、修正してきました。
これらは運営しているサイトの数が多かったのでかなりの作業量が必要になり、なかなか大変な作業だったのですが、HHVMにしたときに数時間おきに少しの間サーバがダウンするのはサービス品質に対して影響が大きいだろうということでやむをえず行いました。
PHP5の記述とPHP7では、特にデータベース回りの記述が変更になっている箇所が多かったので、修正箇所は多岐に渡りました。
また、WordPressのプラグインも、PHP7に対応していないプラグインは削除したり、ファイルの修正で対応できるものは対応するということが必要になりました。
サーバの移行完了
これらの作業を終えることで、無事Apache+PHP5からNginx+PHP7への移行が完了しました。
つまづいた点としては、
- .htaccessが使えないのでパーマリンク設定をnginx.confに記述しなければならない
- PHP5の記述が一部動作しないのでエラーが起こる点はPHP7で動作するように修正しなければならない
という主に2点になります。
思った以上に移行作業は時間はかかりましたが、結果的にサーバのランニングコストを下げることができ、サイトもNginx+PHP7になったことで高速化したように見えるのは良い点ではないかと思います。
まだサーバが移行したばかりなので予期せぬトラブルはあるかもしれませんが、しばらく様子見したいと思います。