13

私の最終目標は、各サーバー インスタンスごとに node.js の費用対効果を高めることです。

私はゲームやチャット ルームを運営しているのではなく、顧客向けの単純な Web サイトを運営しています。ホスト ヘッダー マッピングを使用してポート 80 から複数の Web サイトを実行しながら、単一のサーバーに複数のクライアントを収容したいと考えています。私はまだエクスプレスを使用したいと思っていますが、それが可能であれば、ポート 80 から他のノード アプリへのルーティングのようにします。ノードはこの方法で行うと安くなる可能性がありますが、現在、ポート 80 で実行する場合、各顧客が独自のボックスを必要とするため、私の目的ではより高価です。また、私の動機はノードの開発に集中することですが、そうする理由があるに違いありませんだからコスト的に。

IIS はそのままでこれをサポートしているため、Windows の ASP.NET ではこれをかなり頻繁に行います。これは Apache でも通常のことです。

これが適切な質問でない場合は、これをスタック交換で別のフォーラムに自由に移動するか、ランダムな反対票ではなく建設的な批判をしてください。ありがとう。

アップデート

私がとったアプローチは、(gatspy と s3 を介して) 静的ホスティングを使用し、代わりにクライアントからの投稿メッセージとサーバーからの API キーを介してドメインを登録し、サイトが変更されると定期的に静的サイトを生成する API を使用することでしたが、すべての提案に感謝します!

4

2 に答える 2

26

理論的には、Apache/Lighttpd/Nginx の機能をエミュレートするピュア ノード Web サーバーを構築できますが、お勧めしません。実際、本格的な本番サービスの場合は、サービスの前に常に Nginx または同等のものを配置することをお勧めします (これこれを参照してください)。

ポート 80 で公開されている 2 つのサブサービスに対して単純なNginx構成がどのように機能するかを次に示します。

worker_processes  4;

events {
  worker_connections 1024;
}

http {
  include       mime.types;
  default_type  text/html;

  server {
    listen 80;
    server_name service1.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3000/;
    }
  }
  server {
    listen 80;
    server_name service2.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3001/;
    }
  }
}

ノードがデフォルトで負荷を調整せず、既存のリクエストの処理よりも新しい接続の受け入れを優先していたため、実稼働ボックスのカーネル パニックを見てきました。また、ポート 3000 で実行することにより、Node サービスを非常に少ないアクセス許可で非ルートとして実行できます (さらに、ポート 80 にあるように見えるようにプロキシします)。また、複数のワーカー間で負荷を分散したり、統計情報を提供したり、リクエストをログに記録したり、URL を書き換えたりすることもできます。Nginx は非常に高速です (Apache よりもはるかに軽量です)。同一ボックス プロキシ転送のオーバーヘッドは最小限であり、非常に多くの機能と堅牢性が得られるので、私の本ではスラムダンクです。たとえば、ノード サービスがクラッシュしたり過負荷になったりすると、ユーザーはブラック ホールを取得したり、「申し訳ありませんが、

于 2012-05-13T23:49:45.750 に答える
5

HAProxyのような適切なリバース プロキシを使用して、ポート 80 でリッスンし、headers.host に基づいて非パブリック ポート (10000、10001 など) で複数のノード インスタンスに委任するのはどうでしょうか。

于 2012-04-18T20:04:19.193 に答える