46

1 つのサーバーを使用して、複数のドメインに分散された複数の Node.js Web アプリをホストしています。私の現在のやり方は、アプリケーションごとに異なるポートで Express サーバーを実行し、要求を正しいポート/Express サーバーに単純にルーティング (リダイレクト) するベース サーバーを実行することです。これは機能しますが、ベース サーバーがすべての HTTP リクエストをルーティングし (手動でリダイレクトすることにより)、ユーザーが [hostname.com]:8000 でホストされているアプリを表示することを意味します。

少し調査した結果、ルーティングのニーズにhttp-proxyを使用できることがわかりましたが、同じシステムで複数の Express サーバーを実行するためのベスト プラクティスがあるかどうかを知りたいです。これが私がそれを行うことを計画している方法です:

各 Web アプリには、完全な Express フォルダー構造 (app.js、routes、views など) を持つ独自のフォルダーがあります。アプリはドメインごとにグループ化されるため、フォルダー構造の例は次のようになります。

    hostname.com/
        app.js
        routes/
        views/
        ...
        app1/
            app1.js
            routes/
            views/
            ...
        app2
        ...
    hostname2.com/
        app.js
        routes/
        views/
        ...

各 app.js を node (または現在使用しているforever ) で個別に実行する必要があり、それぞれが内部で異なるポートを使用する必要があり、クロスアプリ リダイレクトは対象アプリ。

それで、それが私の現在の計画です。それにはどのような問題があり、どのような落とし穴を避けるべきですか? 最も重要なのは、この問題 (Node.js/Express を使用して同じシステムで複数の Web アプリをホストする問題) に対する確立された解決策があるかどうかです。

編集: 最終的には WebSocket と HTTPS を使用する予定です。セットアップがサポートできる帯域幅の量は、私にとってほとんど重要ではありません。これは開発サーバーです (少なくとも今のところ)。WebSockets の問題を取り上げてくれた David Ellis に感謝します。

2 番目の編集: EhevuTov と David Ellis の両方の回答に感謝します。どちらも大いに役立ちました。私はまだアプリケーションの全体的な構造に落ち着いており、その質問はこの StackOverflow questionによって詳細に対処されているようです

3番目の編集:この質問を投稿してから、私は道を歩みました(ただし、まだまだ先があります)。私の GitHub リポジトリ でこのファイルをチェックしてください。これは、この質問への回答から学んだことを活用しています!

4

2 に答える 2

36

Express はConnectを使用するため、Connect の仮想ホスト ミドルウェアを使用できると確信しています。他の製品の他の vhost モジュールと同様に動作します。テストして適切なコードを表示するための複数のドメインはありませんが、次のようなものだと思います。

express.createServer()
.use(express.vhost('hostname1.com', require('/path/to/hostname1').app)
.use(express.vhost('hostname2.com', require('/path/to/hostname2').app)
.listen(80)

1 つの Express サーバーでは不十分な場合は、API から Node.Cluster を使用することを検討してください。それでも不十分な場合は、現在の慣例として、Express サーバーの前に Nginx などの asnyc リバース プロキシを配置し、プロキシを Express サーバーに向けます。

于 2012-02-18T16:38:06.783 に答える
6

WebSocket(または実際にはHTTP 1.1機能)を使用する必要がない場合は、代わりにNginXをプロキシとして使用できます

利点は、NginXが処理できる合計負荷がノードよりも高いことです(基本的に、静的にコンパイルされ、この種のものに特化されています)が、データをストリーミングする機能が失われます(一度に小さなチャンクを送信します)。

小規模なサイトの場合、または将来必要になる機能がわからない場合はnode-http-proxy、プロキシがサーバーのボトルネックであることを証明できる場合にのみ、NginXに切り替えてください。幸い、後で必要になった場合でも、NginXをセットアップするのは難しくありません。

于 2012-02-17T19:10:56.183 に答える