1. ホーム
  2. node.js

[解決済み】Node.jsのみの使用と、Node.jsとApache/Nginxの併用について

2022-04-01 14:22:42

質問

Node.jsをサーバーとしてのみ使用する場合、どのようなケースで使用するのが好ましいですか?

を行う場合 ではなく Node.jsだけを使いたい場合、Node.jsと相性の良いものは何でしょうか?ApacheかNginxか?

どのように解決するのですか?

Node.jsの前に別のウェブサーバを置くには、いくつかの理由があります。

  • Node.js プロセスの特権/setuid を気にする必要がない。80番ポートにバインドできるのは、通常rootだけです。nginx/Apache が root として起動し、ポート 80 にバインドし、root 権限を放棄することを心配するようにすれば、Node アプリはその心配をする必要がありません。
  • 画像、CSS、JS、HTMLなどの静的ファイルを提供する。Nodeは適切な静的ファイルのWebサーバを使用するのに比べて効率が悪いかもしれません(特定のシナリオではNodeの方が速いかもしれませんが、これが普通であることはないでしょう)。ファイルがより効率的に提供されることに加え、Nodeから提供する場合のようにeTagsやキャッシュコントロールヘッダの処理について心配する必要はありません。フレームワークによっては、これを処理してくれるものもありますが、確認が必要です。とはいえ、やはり遅いでしょう。
  • Matt Sergeant が彼の回答で述べたように、ノードサービスがクラッシュした場合、より簡単に意味のあるエラーページを表示したり、静的なサイトにフォールバックしたりすることができます。そうでなければ、ユーザーは単にタイムアウトした接続を得るだけかもしれません。
  • Nodeの前で別のWebサーバを実行することで、Nodeに対するセキュリティ上の欠陥やDoS攻撃を緩和することができるかもしれません。実際の例としては CVE-2013-4450 Node の前で Nginx のようなものを走らせることで防ぐことができます。 .

2番目の箇所を補足すると、静的ファイルはCDNを経由するか、Varnishのようなキャッシュサーバーの後ろから提供する必要があります。この場合、オリジンがNodeであろうとNginxであろうとApacheであろうと、あまり問題にはなりません。

ウェブソケットを使用する場合、最近のバージョンのnginx (>= 1.3.13) を使用するようにしてください。