同じシステム上で複数のExpressサーバーをどのように編成する必要がありますか?
-
27-10-2019 - |
質問
1つのサーバーを使用して、複数のドメインに分散されている複数のNode.jsWebアプリをホストしています。私の現在の慣行は、異なるポートでアプリごとにExpressサーバーを実行し、要求を正しいポート/ Expressサーバーにルーティング(リダイレクト)するだけのベースサーバーを実行することです。これは機能しますが、ベースサーバーがすべてのHTTPリクエストをルーティングし(手動でリダイレクトすることにより)、ユーザーにはアプリが[hostname.com]:8000でホストされていると見なされることを意味します。
少し調べてみたところ、 http-proxy ルーティングのニーズに対応しますが、同じシステムで複数のExpressサーバーを実行するためのベストプラクティスがあるかどうかを知りたいのですが。これが私がそれをすることを計画している方法です:
各app.jsをノードで(または forever で)個別に実行する必要があります。私は現在使用しています)、それぞれが内部で異なるポートを使用する必要があり、アプリ間のリダイレクトはターゲットアプリのポートに向けられます。
それが私の現在の計画です。それの問題は何ですか、そして私はどのような落とし穴を避けるべきですか? 最も重要なことは、この問題に対する確立された解決策がありますか?Node.js / Expressを使用して同じシステムで複数のWebアプリをホストする問題ですか?
編集:最終的にはWebSocketとHTTPSを使用する予定ですが、セットアップでサポートできる帯域幅の量は私にとってほとんど重要ではありません。これは開発サーバーです(少なくとも今のところ)。 WebSocketの問題を提起してくれたDavidEllisに感謝します。
2回目の編集:EhevuTovとDavid Ellisの回答に感謝します。どちらも、非常に役立ちました。私はまだアプリケーションの全体的な構造を決定しています。その質問は
3番目の編集:この質問を投稿してから、私は道を歩みました(ただし、まだまだ先があります)。
解決
Expressは
1台のExpressサーバーでは不十分な場合は、APIからNode.Clusterを使用することを検討してください。それでも不十分な場合は、現在の方法では、NginxなどのasnycリバースプロキシをExpressサーバーの前に配置し、プロキシをExpressサーバーにポイントします。
他のヒント
WebSocket(または実際にはHTTP 1.1機能)を使用する必要がない場合は、代わりにNginXをプロキシとして使用できます。
利点は、ノードよりもNginXが処理できる総負荷が高いことです(基本的に、静的にコンパイルされ、この種のことに特化しています)が、データをストリーミングする機能が失われます(一度に小さなチャンクを送信します)。
小規模なサイトの場合、または将来必要になる機能がわからない場合は、node-http-proxy
を使用し、プロキシがサーバーのボトルネックであることを証明できる場合にのみNginXに切り替えることをお勧めします。幸い、後で必要になった場合でもNginXをセットアップするのは難しくありません。