大規模サイトでCloudflareを使うためのApacheチューニング

シェアする

Voiced by Amazon Polly

1日に数万~数十万PVを捌くVPSや専用サーバーの場合、デフォルトの設定では接続や切断が繰り返されることでサーバーが高負荷となったり、接続が不安定になったりすることがあります。

このような場合、リバースプロキシであるCloudflareとの接続をできるだけ維持するようにすることで安定化を図ることができます。

この設定は大規模サイト向けであり、メモリ使用量が大きく増大することがあります。小規模なサイトでは逆効果になるかもしれません。
広告



設定のアプローチ

今回の設定は、できるだけ接続を切断しないようにする、つまり一度使った接続をできるだけ維持することで高速化や安定化を図るようなものになります。
従って、サーバー側で接続を維持しておけるだけのリソースを確保しておく必要があります。特に物理メモリに関しては重要です。

設定方法

次の設定を行うことで、大規模サイト向けの対応を行うことができます。

キープアライブを有効化し、できるだけ長く維持する

Keep-Aliveを有効にし、維持時間をできるだけ長くします。少なくとも5分(300秒)以上に設定することを推奨しています。
KeepAlive On
KeepAliveTimeout 300

この設定を行うことで、Cloudflareとオリジンサーバー間の接続が維持され、安定化を図ることができます。
詳細については、Stayin’ Alive(https://blog.cloudflare.com/keep-alive/)をご覧ください。

この設定が有効な場合、netstatで確認した場合にESTABLISHEDとなる接続が急増する場合がありますが、不具合ではありません。

大量のhttpdプロセスを待機可能としておく

キープアライブにより接続を維持しているため、接続を維持するためのプロセスが大量に必要となります。
MPMにおいて、MaxClientsの設定を、少なくとも500、可能であれば1000以上に設定することを推奨します。MaxClientsの設定値はServerLimitにより制限されるため、ServerLimitの値も同時に変更してください。
ここでは、preforkを使用しています。
ServerLimit 500
MaxClients 500

大量のhttpdプロセスを待機させることになるため、PHPを使用している場合はモジュール版ではなくCGI版を使用することをお勧めします。

小規模サイトには不適

このチューニングは大量の物理メモリを消費することで高速化を図るものとなるため、小規模なサイトでは却って無駄になるかもしれませんし、そもそもこの設定が必要ないかもしれません。
TIME_WAITが大量発生して、サーバーの接続が重くなってきた時が見直し時かと思います。