Nginx+FastCGI

先日、このWordPressサイトを載せている「さくらのVPS」サーバーのWebサーバーをApacheからNginxに変更しました。
FastCGIは、PHP用にPHP-FPMと、Perl/CGI用にfcgi-wrap + spwan-fcgiを使用しています。

WordPressを使うとApache 1プロセスで50MBぐらいメモリを消費するのが気になっていたのですが、Nginxに移行してPHP-FPMプロセス数の上限を低めに設定することで、サーバー全体の使用メモリが低いところで安定するようになりました。

静的コンテンツ配信やProxyなどの軽い処理はNginxで、アプリケーションの重めの処理はFastCGIのアプリケーションサーバーで、という役割分担を明確にすることでサーバーリソースを効率よく使うということなんですね。

ただし、ページ表示速度については、ブラウザでアクセスしたときの体感速度はApacheのときとほとんど変わっていません。
また、監視サービスPingdomのResponse TimeもApacheのときとほぼ同じ数値です。
gzipによる圧縮転送、Proxy Cache設定、 PHP APCによるキャッシュ、memcachedによるキャッシュといろいろ試したのですが、アクセス速度は変わりませんでした。

この原因は下記のように考えています。

  • このサイトのアクセスがほとんどなくて負荷がかかっていない。
  • MySQLのクエリキャッシュやバッファが有効に使えていて、ディスクアクセスがない(もしくは非常に少ない)のでDBアクセスが高速。
  • 仮にディスクアクセスがあっても、「さくらのVPS」のディスクが速いのでDBアクセスが高速。

ディスクがやや遅いサーバーや、Webアクセス数が多いサイトでは、よりNginxやFastCGIのメリットを享受できるのではないかと思います。


ついでに、Movable Type + Nginx + Starmanという構成も試してみました。
コンテンツがない初期状態での印象ですが、こちらは、管理ページの表示がApacheよりもNginxのほうが明らかに速かったです。
といいますか、Movable TypeはWordPressよりもかなり軽くていいですね。


今さらになりますが、今回初めてNginxとFastCGIを導入してみました。
PHP, Perl, Pythonなど、アプリケーションをロードすることでApacheプロセスがメモリを大量に消費してしまうことでメモリ不足に悩まされる場合は、Nginx + FastCGIを使ってみるとよさそうです。
Apacheに比べて設定がシンプルなところもいいですね。

ただし、Apacheも不要なモジュールを外して軽量化することができますし、長年の実績があり機能や拡張モジュールが豊富というメリットがあります。
サーバースペックやセキュリティ要件、運用のしやすさなども含めて検討し、案件に合わせて、Apache、Nginxを適切に選定したいと思います。

Follow me!