web-dev-qa-db-ja.com

Apache、nginx、またはlighttpd?

私はイベントからライブブログをするつもりで、トラフィックの大幅な急増を期待しています。私は現在modphpでApacheを使用していますが、昨年はトラフィックが多かったために死亡しましたが、二度と発生したくありません。

WordPressで実行されているこのブログ用に別のVPSを設定することを考えています。

どのhttpサーバーを使用する必要がありますか? Apache、lighttpd、またはnginx?

重負荷の下で最高のパフォーマンスを発揮するのはどれですか?

コンテンツは非常に動的になり、AJAX更新されます。

5
vk123

Lighttpdまたはnginxは、おそらくこれを実行するための正しい方法です。個人的には、nginxを選びます。

アプリケーションも大幅に最適化することを忘れないでください。 memcachedを使用してクエリ結果をキャッシュします。

個別のCookieフリードメイン から画像、js、cssを提供することで、さらに最適化を行うことができます。そのガイドのヒントに従うことで、あなたもあなたの道をうまく進むでしょう。

静的ページデータをキャッシュするために、Webサーバーの前に Varnish を付けることができます。本当にすべてをやりたい場合は、CDNから画像、js、cssを提供してください。

あなたが得る(または得ると予想される)トラフィックの量に応じて;複数のフロントエンドWebノードを検討する必要があるかもしれません。その場合、Varnishは非常に優れたロードバランサーとして機能します。

私は前にそれを言いました、そして私はそれをもう一度言います。トラフィックの急増が予想され、アップタイムが必要で停止がないことが予想される場合は、 AutoScaling オファリングを備えたAmazonEC2を検討できます。特にトラフィックが一年中続くことを期待していない場合は、独自のソリューションを構築するよりも効率的である可能性があります。

また、VPSを使用しているか、物理マシンを使用しているかについても言及していません。 IO競合の問題が頻繁に発生し、IOwait時間が長くなるため、VPSはトラフィックの多いサイトに適していることがわかりました。高可用性を実現するには、専用ハードウェア、デュアルNIC、冗長ネットワークインフラストラクチャなど。

すべてはあなたの予算に依存すると思います。

8
Tom O'Connor

Nginxまたはlighttpdは確かな賭けです。 preforkの代わりにmpm-workerモジュールを使用することで、Apacheの競争力を高めることができます。ただし、これにはfastcgiなどを使用するようにphpを構成する必要があります。それ自体はおそらく賢明なアイデアです。

私は個人的にwordpress php-fpmでnginxを使用して実行しますが、それは地獄のように高速です。

選択したWebサーバーに関係なく、いくつかの最適化を行うことができます。

  1. PHPオペコードキャッシュであるAPCを有効/インストールします。
  2. Mysqlクエリキャッシュを有効にする
  3. WPスーパーキャッシュをインストールし、可能な限り静的バージョンを提供します。

シミュレートされた負荷の下でセットアップをテストして、それが失敗しないことを確認します。

3
CarpeNoctem

Fastcgiを介してApache2preforkからnginxphpに移行しました。本当に比較はありません。nginxのデフォルト設定は、preforkを使用してApacheの要求を何度も処理するだけです。高速cgiを介してApache2mpmワーカーphpを使用することもできましたが、サイトを切り替える前にすべてを完全にテストするために、同じサーバーに異なるポートでnginxをインストールしました。これで、mpmworkerとfastcgiを使用してApache2をやり直し、比較することができます。

私の全体的な考えは、Apache2mpmワーカーfastcgiが私にとっても同様に機能するだろうということです。

http://loadimpact.com を使用して負荷テストを行うことができます。ここで、apach2 2のセットアップでは20ユーザーを終了できず、nginxは実質的に負荷なしで50ユーザーを完了しました。ところで、私のセットアップは1GBのスワップで128MB RAM)です。

2
Will

以前は、4つの負荷分散バックエンドサーバーの1つにプロキシする約200のvhost(クライアントごとに1つ)を使用してApache2をセットアップしていました。 mpm-workerとpreforkの両方で、Apache2は接続ごとに膨大な量の非共有メモリを使用していることがわかりました(フロントエンドだけで、20〜30 mb ea、合計でほぼ400〜500 mb!) maxclientsに基づくその数の倍数)RAMは、フロントエンドワーカーの大規模なアイドルプール専用であり、マシンで毎週最大負荷に常に達していませんでした。

次に、フロントエンドをnginxに切り替えました。最大4096の接続(Apacheの最大クライアントと同様)を取るように構成し、30MBのRAMを使用しています。大量のスワップ状態でも実行を継続し、適切な応答を提供します。最大同時リクエスト数をほぼ2倍にすることができました。締め切り日に最大負荷に達するだけで、それでもバックエンドを微調整して、それらのクライアントに優先順位を付けることができます。

後から考えると、Apache2をロードバランサー/プロキシとして使用することはおそらく賢明ではありませんでしたが、それは私たちが何年もの進化の後に終わったものです。私たちは明らかにそれを上回り、nginxが救助に来ました。

これは単なる事例証拠ですが、イベントベースのサーバー(lighttpdまたはnginx)のいずれでも同様のサクセスストーリーを見つけることができます。

2
Jason

このサイトへようこそ。

失望させて申し訳ありませんが、高負荷でサイトが再びクラッシュする可能性があります。どのサーバーも容量に制限があります。 VPSには、サーバー全体の容量のほんの一部しかありません。そして、あなたはあなたの負荷がどれくらい高くなるかわかりません。

コンテンツは非常に動的になります-AJAX更新

これにより、サーバーの負荷が大幅に増加する可能性があることに注意してください。実装によって異なります。

あなたの質問に答えるには、nginxを単独で使用するか、Espennilsenが書いたようにApacheの前でプロキシとしてnginxを使用することが、おそらくあなたが言及したものの最良の解決策です。

CarpeNoctemの提案もしっかりしています。 WPスーパーキャッシュは、簡単な方法でWordpressを高速化するための一般的な推奨事項です。以下の私の提案に従うと、WPスーパーキャッシュが削減されます。

予算内で実際にパフォーマンスを得るには、次のことを行う必要があります。

  • aJAXを無効にする
  • 可能な限り、データベースに頻繁にクエリを実行するWordpressプラグインを無効にします。
  • 純粋な Squid CacheなどのHTTPプロキシキャッシュ をWebサーバー(Apache)の前に配置します。

Squidは、完全なWebページ出力をWordpress RAMに保持し、一定時間後にWordpressから更新」するように構成できます。これは、同じバージョンを意味します。しばらくの間、変更なしですべてのユーザーにWebページが提供されますが、その間、SquidはRAMからWebページを提供できます。これは、Webサーバーにアクセスして各ページに対してWordpressリクエスト。

キャッシュの設定には注意が必要で、ある程度の知識が必要です。この分野での過去の経験を持つプロのシステム管理者を使用することをお勧めします。

2
Jesper M

phpアプリは、3つの選択肢すべてのボトルネックになります。私はApacheで数十億のヒットサイトをうまくセットアップしました。

1
aspitzer