6

すべての静的コンテンツを CDN に移動することを計画しているため、サーバーには動的コンテンツしか残っていません。Nginx を Apache のリバース プロキシとして設定しました。Apache にアクセスすることなく、Nginx によって直接配信された静的リクエスト。

この場合、Nginx がリクエストの大部分を処理しており、Nginx の必要性がはっきりとわかります。

すべての静的コンテンツを別のドメインに移動したので、Apache の前に nginx を配置する必要がありますか? 現在、すべてのリクエストはデフォルトで動的リクエストであり、すべて Apache に送信されるためです。

動的コンテンツのみで Nginx と Apache を実行することの他の利点はありますか。

私の動的コンテンツは PHP/MySQL です

編集:

明確にするために:私は今Nginxをリバースプロキシとして持っています。静的コンテンツと動的コンテンツを配信します。しかし、静的ファイルを CDN に移動しています。私のドメインにはまだNginxが必要ですか?

4

5 に答える 5

14

はい、Apache の前に nginx が絶対に必要です。Apache は、接続ごとに 1 つのスレッドまたはプロセスを使用します。これらのスレッドはそれぞれメモリを占有します。Web サイトに数百人のユーザーがアクセスしていて、キープアライブが有効になっている場合、これらの各ブラウザーは、Apache プロセスまたはスレッドがサーバーのメモリを占有するために忙しくなります。

これは、Apache サーバーでキープアライブを無効にすることで回避できますが、ブラウザーが接続を再利用できないため、Web サイトのパフォーマンスが低下します。

代わりに、キープアライブを有効にしたリバース プロキシとして nginx を使用します。小さなメモリ フットプリント (約 8 メガバイト) で数千の接続を維持できます。nginx は Apache サーバーに対してローカルであるため、各リクエストは Apache の子またはスレッドを数マイクロ秒間占有するだけです。つまり、ほんの一握りの apache プロセスだけで、何千人もの人々にサービスを提供できます。

また、nginx の構成は apache よりもはるかに柔軟であり、フロント エンドに配置することで多くの柔軟性が得られます。

于 2010-05-26T11:44:24.090 に答える
3

私が1つのWebサイトに対して行ったことは次のとおりです。

  • Apache の前にリバース プロキシとして nginx をセットアップする
  • そのように構成します:
    • PHP ページ(動的コンテンツ)へのリクエストは Apache に送信されます。
    • 静的ファイル(CSS、JS など)へのリクエストは、nginx によって直接処理されます。

これにより、2 つのドメインを設定する必要がなくなります。すべてが同じドメイン上にあります。


基本的に、私がやったことは次のとおりです。

  • gzip圧縮なし、キャッシングあり、nginxから画像を提供
  • nginx から js/css (つまり、テキスト ファイル) を gzip 圧縮とキャッシングで提供する
  • 他の拡張機能 (pdf、実行可能ファイルなど) を nginx 形式で、圧縮せず、キャッシュせずに提供する
  • 他のリクエストを Apache に渡す


私のnginxの設定ファイルは次のようになります:

server {
    listen   80;
    server_name  MY_DOMAIN_NAME;

    access_log  /var/log/nginx/MY_DOMAIN_NAME.access.log;

    gzip on;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types text/plain text/html text/css text/xml application/xml application/xml+rss application/xml+atom text/javascript application/x-javascript application/javascript;

    location ~* ^.+\.(jpg|jpeg|gif|png|ico)$  {
        root    /home/www/MY_DOMAIN_NAME;
        #access_log off;
        gzip off;
        expires 1d;
    }
    location ~* ^.+\.(css|js)$ {
        root    /home/www/MY_DOMAIN_NAME;
        #access_log off;
        expires 1d;
    }
    location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ {
        root    /home/www/MY_DOMAIN_NAME;
        gzip off;
    }


    location / {
        proxy_pass   http://MY_DOMAIN_NAME:8080;
        proxy_redirect     off;

        proxy_set_header   Host             \$host;
        proxy_set_header   X-Real-IP        \$remote_addr;
        proxy_set_header   X-Forwarded-For  \$proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}


では、なぜそのようなことをするのでしょうか。

さて、nginxは次のことになっています:

  • 必要なメモリが少ない
  • より速く
  • より多くの接続を処理できる

したがって、トラフィックの少ない Web サイトで、Apache にかかる負荷を軽減するのに役立つと思います。

于 2010-04-16T17:36:16.323 に答える
2

いいえ、nginxはもう必要ありません。

于 2010-04-16T21:46:05.563 に答える
2

nginx を使用して、Apache インスタンスから SSL 処理をオフロードすることもできます。

たとえば、nginx->haproxy->apache サーバーのプールで構成された 1 つのスタックがあります。nginx と haproxy はハートビート クラスター上で共存し、リクエストをバックエンドの Apache ボックスのプールに送ります。すべての SSL 証明書を nginx フロントエンドにインストールします。

于 2010-04-20T13:35:56.750 に答える
0

Apache 1.3 を使用する場合は、前に nginx を配置するのが最適なソリューションです。

nginx は何千もの接続を簡単に提供できますが、Apache はできません。

于 2010-04-16T17:27:34.943 に答える