web-dev-qa-db-ja.com

Apache対Nginx

私は最近、ApacheとNginxの違いを調査しており、どちらを選択すべきか混乱しています。

私はいくつかの検索を行いましたが、2つの間に明確な比較はありません、そして私はここの誰かが2つの間の違いについて彼らの意見を与えることができるかどうか疑問に思っていました。

私の現在の知識では、mod_phpはfastcgiよりも高速で安全であることを理解できますが、同時接続とメモリ消費に関しては、Apacheの方がはるかに悪いです。

私のサイトは多くのロングポーリングを使用していますが、AJAX Webベースではありません(つまり、ロングポーリングが上部にあるApache)。

Apacheのメモリ問題に対する私の元の解決策は、node.jsを介してロングポーリングを送信し、node.jsが2秒ごとにApacheにアクセスするようにすることでした。私はこれは十分ではないかもしれないと気づき、さまざまな解決策を検討しています。私のオリジナルのアイデアがうまくいったかどうか、私はまだ興味があります。

それで、現代のウェブにはどちらが良いですか? ApacheまたはNginx?

更新:提示されたすべての提案は適切で有効でした。完全なNginxサーバーを使用するという最初の2番目のアイデアを採用しました。専用サーバーであることでfastcgiによるセキュリティの問題に悩むことができず、長いポーリングスクリプトをPHPで作成する必要があるため、高負荷の同時接続とApacheは、構造をどれだけ変更しても、それを実行することはできません。

私はマーティンFの回答にマークを付けました。彼が私の質問ポイントに明確で完全な回答を与えたので、彼はマークに値するのだと思います。 Nginxがプロキシで実行できる非常に非常にクールなものを見つけたからです。

おかげで、

29
Sammaye

あなたは、私が対処する必要があると私が思ういくつかの誤解を持っているようです。

まず、mod_phpの速度はわずかですが、すべてのテストで、違いが非常に小さいため、考慮に入れるべきではないことが示されています。また、専用サーバーを見て、セキュリティの側面が関係していることを疑っています。 mod_phpは実際には共有環境でのみ利点があります-実際、専用環境ではphp-fpmがPHPとして利点を持ち、Webサーバーは異なるプロセスとして実行されるようになりました。遅いログなど、php-fpmの素晴らしいロギングオプション。

世界が白黒だったら、純粋なnginxセットアップでphp-fpmを使用してphpをコンパイルすると思います。より現実的には、Apacheがすでに動作している場合は、nginxをApacheのリバースプロキシにすると、セットアップ時間を数時間節約でき、パフォーマンスの違いはわずかになります。

しかし、世界が一瞬白黒であると仮定しましょう。これにより、セットアップがはるかに素晴らしいものになるからです。あなたはあなたのウェブサーバーのためにnginx + php-fpmを行います。アップロードを解決するには、nginxのアップロードモジュールとアップロード進行状況モジュールを使用します。これは、Webサーバーがアップロードを受け入れ、ファイルパスがPHPに渡されることを意味します。これにより、ファイルをfastcgiプロトコルを介してnginxとPHPの間でストリーミングする必要がなくなります。 、甘い。 (私はこれをライブセットアップで使用していますが、うまくいきます!)

ユーザーダウンロードでは、x-accel-redirectと呼ばれるnginxs x-send-file-like機能を使用します。基本的には、PHPで認証を行い、nginxが取得するヘッダーを設定して、そのファイルの転送を開始します。 PHPは実行を終了し、Webサーバーが転送を処理しています。 (繰り返しますが、私はこれをライブ設定で使用していますが、うまく機能しています)

サーバー間でのファイルの配布やその他の長時間実行オペレーションの場合、PHPはこれに最適ではないことがわかったため、異なるサーバー上のワーカー間でジョブを分散できるジョブサーバーであるgearmanをインストールします。ワーカーはany言語で記述できます。したがって、PHPが使用する100 MBではなく、合計200 KBのメモリを使用して、Distributed Workerを作成し、そのうちの5つを生成できます。甘い。 (私はこれもライブで実行しているので、実際にはすべて可能です)

あなたがまだそれを手に入れていない場合、私はあなたの問題の多くがあなたのウェブサーバーに全く関係していないと思います、Apacheはそれがその構造のためにあなたのウェブサーバーに関係することを強制するからです多くの場合、PHPよりもはるかに優れたジョブ用ツールがあり、PHPはこれを認識し、PHPを離れることなく作業をオフロードする優れたオプションを提供する言語です。

私はnginxを強くお勧めしますが、他の問題については他のオプションも検討する必要があると思います。スケーリングまたはパフォーマンスの問題がある場合は、遠慮なく私に書いてください。ここからメッセージを送信できるかどうかはわかりませんが、nginxでタグ付けされていないものについてはサーバー障害を追跡しないので、それ以外の場合は[email protected]にメールを送ってください。 :)

28

Nginxをリバースプロキシとして実行することをお勧めします。すべての静的ファイルとキャッシュファイルを処理し(Apacheよりかなり高速で、メモリオーバーヘッドが少ない場合)、動的コンテンツのすべてのリクエストをApacheに転送します。

5
Greg Annandale

Mod_phpが他の方法より速いかどうかはよくわかりませんが、どこでこれを読みましたか?私はnginx + php-fpmを使用していくつかのラボテストを行いました。測定した結果から、他のすべての設定に勝っています。

このセットアップを見てください: http://interfacelab.com/nginx-php-fpm-apc-awesome/

私はPHPパッケージを http://www.dotdeb.org/ から使用することを除いて、ほぼ同じに設定しました-php-fpmが含まれていますパッケージと、すぐに使えるinitスクリプトです。memecacheやsyckは使用していません。

1
pauska