新しいWebサーバーのアーキテクチャについて考えています。 Nginxの前のキャッシュとしてVarnishをリバースプロキシとして使用し、Apacheの前で静的ファイルを提供して、すべての重い作業を行うことは良い考えでしょうか?
PhpとRuby on Rails applications。
他の2つのプロセスを介してApacheにPHPリクエストを渡すオーバーヘッドが多すぎますか?
どうもありがとう!
ええ、それは有効です。私の個人的なアプローチは、Varnishを前もって使用し、VCLを使用して静的NGINXリクエストと負荷の高いトラフィック(ApacheかPassengerか、それとも問題ではない)の間でトラフィックを分割することです。これは、余分なオーバーヘッドを必要としないため、同じマシンでisの場合に特に当てはまります。それは必ずしもあなたに何かを買うわけではありません。
Varnishは(まだ)gzip圧縮をサポートしていないため、これを前のnginxと入れ替えて、varnishが送り返すものを圧縮することをお勧めします。ワニスとnginxは同じリソースを争わないため(nginxはCPUをgzip圧縮に使用し、ワニスはメモリを使用)、同じマシンでスムーズに実行する必要があります。
今ワニス gzip圧縮をサポート なので、(コメントで提案されているように)SSL終了が必要でない限り、ワニスをインターネットに直接接続することをお勧めします。
Httpの場合:
(インターネット)->(ワニス、gzip、キャッシング、esi)->(アプリケーション)
Httpsの場合:
(インターネット)->(nginx、ssl)->(ワニス、gzip、キャッシング、esi)->(アプリケーション)
Apacheも必要な場合(ユビキタスなmod_foobarサポートのため)、ワニスとアプリケーションの間に配置します
Update:ワニス3.0にgzipサポートが含まれるように更新されました。コメントで提案されたssl/esiを追加
オーバーヘッドの量は重要ではありません。これらの2つの層が必要な理由の一部は、スケーラビリティのためだと思います。その場合、Apacheと比較して、ワニスとnginxがあまり機能していないことがわかるでしょう。
1つのマシンに3つの層すべてを配置する場合、サーバー自体の容量に到達する前に、パフォーマンスへの影響が少なくなるはずです。
代わりに、ワニス+ nginxを乗客と一緒に使ってみませんか?私は過去にこの設定を使用したことがありますが、nginxを使用するパッセンジャーは比較的軽く、かなりうまく動作しました。 Railsスタックを実行しているApacheと結婚していない場合は、検討する価値があるかもしれません。
私は、スタートアップeコマースプラットフォームのシステム管理者です。 PHP/Apacheスタックの前でvarnish + nginxを使用していますが、これは不思議に機能しました。
メモリ使用量の多いアプリケーションがあり、アプリはWebノードあたり約15〜20ギガバイトのRAMを使用しており、ワニスを前面に配置すると、ノードあたり約8ギガバイトのRAMになります。彼らは急上昇したことがありません。
だから私はそれを強くお勧めします。
Apache + PHP + MySQLサーバーでboostモジュールを使用してDrupalを実行していますが、それらの前ではggin-static機能をオンにしてNginxを使用し、boostの結果を使用してユーザーにサービスを提供しています。
さらに、ワニスをすべて同じPCで使用していることに加えて、良い結果が出ています。
また、Nginxを使用して、Drupalがキャッシュに対して十分に機能しないヘッダーを微調整します。
ESIのようなものが必要でない限り、それは良い考えではありません。 Nginxには、独自のキャッシングシステムがあります パフォーマンスが向上します 。