はい、それはサーバーです。
node.js Webアプリケーションは、NginxやApacheと同じように本格的なWebサーバーです。
実際、他のWebサーバーを使用せずにnode.jsアプリケーションを提供できます。コードを次のように変更するだけです。
app = express();
http.createServer(app).listen(80);
実際、一部のプロジェクトでは、他のサーバー(Apacheを含む)のフロントエンドロードバランサーとしてnode.jsを使用しています。
これを行う開発スタックはnode.jsだけではないことに注意してください。Go、Java、SwiftのWeb開発フレームワークもこれを行います。
どうして?
最初はCGIでした。CGIは問題なく動作しました。Apacheはリクエストを受け取り、URLがCGIアプリを実行する必要があることを検出し、そのCGIアプリを実行してデータを環境変数として渡し、stdoutを読み取り、データをブラウザーに返します。
問題はそれが遅いということです。CGIアプリが静的にコンパイルされた小さなCプログラムであった場合は問題ありませんが、静的にコンパイルされた小さなCプログラムのグループは保守が困難になりました。そのため、人々はスクリプト言語で書き始めました。その後、それを維持するのが難しくなり、人々はオブジェクト指向のMVCフレームワークの開発を始めました。今、私たちは問題を抱え始めました-提供する動的なものがない場合でも、すべてのリクエストはそれらすべてのクラスをコンパイルし、HTMLを提供するためだけにそれらすべてのオブジェクトを作成する必要があります(フレームワークは提供する動的なものがないことを理解する必要があるため)。
リクエストごとにこれらすべてのオブジェクトを作成する必要がない場合はどうなりますか?
それが人々の考えでした。そして、その問題を解決しようとすることから、いくつかの戦略が生まれました。最も初期の1つは、mod_php
ApacheのようにWebサーバーに直接インタープリターを埋め込むことでした。コンパイルされたクラスとオブジェクトはグローバル変数に格納できるため、キャッシュできます。もう1つの戦略は、事前コンパイルを行うことでした。さらに別の戦略は、アプリケーションを通常のサーバープロセスとして実行し、FastCGIなどのカスタムプロトコルを使用してWebサーバーと通信することでした。
その後、一部の開発者は、アプリ->サーバープロトコルとしてHTTPを使用し始めました。事実上、アプリはHTTPサーバーでもあります。これの利点は、新しい、おそらくバグのある、おそらくテストされていないプロトコルを実装する必要がなく、Webブラウザーを使用して(または一般的にcurl
)アプリを直接デバッグできることです。また、アプリをサポートするために変更されたWebサーバーは必要ありません。リバースプロキシまたはリダイレクトを実行できるWebサーバーだけが必要です。
なぜApache / Nginxを使用するのですか?
node.jsアプリを提供するときは、自分が独自のWebサーバーの作成者であることに注意してください。アプリの潜在的なバグは、インターネット上で直接悪用可能なバグです。一部の人々は(当然のことながら)これに満足していません。
node.jsアプリの前にApacheまたはNginxのレイヤーを追加するということは、アプリへのインターフェースとして、ライブインターネット上にバトルテスト済みのセキュリティ強化されたソフトウェアがあることを意味します。わずかな遅延(リバースプロキシ)が追加されますが、ほとんどの場合、それだけの価値があると考えています。
これは、node.jsの初期の標準的なアドバイスでした。しかし、最近では、node.jsをインターネットに直接公開するサイトやWebサービスもあります。このhttp.Server
モジュールは、信頼できるようにインターネット上でかなりよくテストされています。
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?
いいえ、それは正しくありません