プロキシとしての nginx の動作

プロキシとしての nginx の動作

私は、squid + apache で動作するアーキテクチャを置き換えるために、さまざまな構成で nginx をテストしています。静的リクエストと負荷分散の管理に nginx を使用できることはわかっていますが、よく理解できない特定のソリューションに興味があります。

私は 2 台の nginx サーバー (バランス) を proxy_pass 設定で使用して、すべてのリクエストを Apache サーバーに渡しています。1 つのクライアントがサイトにリクエストを送信すると、nginx サーバーの 1 つがそれを処理し、Apache サーバーに送信します。この動作によってシステムがどのように改善されるのでしょうか。すべてのリクエストが Apache を通過しているように見えますが、まったくメリットがありません。100 の同時接続が nginx を通過するとどうなりますか。100 の接続が Apache サーバーに送られるのでしょうか。それとも、Apache に小さな影響を与える何らかの内部動作なのでしょうか。

答え1

Nginxは、サイトへの接続が遅い場合にApacheを助けます。たとえば、nginxのステートマシンアーキテクチャはSlowloris DDoSに対して脆弱ではありません。http://isc.sans.org/diary.html?storyid=6601

答え2

nginx が多くの機能を実行できることは知っていますが、アーキテクチャの各部分を、その 1 つの部分を非常にうまく実行するソフトウェアに委任してみてはいかがでしょうか。これらの部分の一部またはすべてを検討してください。負荷分散には pound または haproxy、リバース キャッシュ プロキシには varnish または squid、バックエンドには静的コンテンツと動的コンテンツ用にそれぞれ nginx と apache を配置します。

とはいえ、あなたの質問が何なのかよくわかりません。nginx にすべてのリクエストを Apache バックエンドに渡すように指示しました (「渡す」とは、リクエストをキャッシュしないという意味だと思います)。キャッシュしない場合は、バックエンドの複数の Apache サーバーに負荷を分散できるという利点があります。バックエンドの Apache サーバーが 1 つしかない場合は、リクエストをそのまま渡すのではなく、コンテンツをキャッシュすることによってのみ利点が得られます。

設定内容や実行したい内容についての詳細を教えていただけると助かります。

答え3

同意します。nginx に静的コンテンツを直接提供させ、Apache は PHP の処理のみを処理すればよくなります。つまり、Apache ワーカーの数が大幅に減り、最終的にはパフォーマンスが大幅に向上します。

  位置 / {
    proxy_pass http://backendwww;
  }
  場所 ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ {
    access_log オフ;
    有効期限は30日です。
    ルート /var/www/application_webroot;
    error_page 404 = @fallback;
  }
  場所 @fallback {
    proxy_pass http://backendwww;
  }
  場所 ~ /\.ht {
    すべてを否定する;
  }

答え4

Zero* に同意します。enginx ですべての静的ファイルを処理します。ただし、Apache/PHP に渡さないものを指定するのではなく、php をバックエンドに渡すだけの簡単な構成です。例:

location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }

関連情報