Node.jsのウェブアプリをIIS上でホストする方法
ASP.NET と Node.js/Express 共存はできるのか?
Node.js を使うと、ウェブアプリケーションをとても簡単に開発することができます。
特に JavaScript をそのまま使えるので、クライアント側のアプリケーションとの親和性がとても良い上に、 Express や JWT (JSON Web Token) といった、サーバー側のライブラリも豊富に用意されているので鬼に金棒といったところです。
ところが、実際の企業内での運用の問題を考えると、他のアプリケーションとの共存の都合などで、ウェブサーバーとしては IIS を選択せざるを得ない場合も少なくありません。
例えば、特定のホスト名、ポート番号を利用する .NET Framework 向けの ASP.NET アプリケーションを使う要件があれば、ウェブサーバーとしては IIS を選択せざるを得ないでしょう。
こうした場合、Node.js (+Express) は使えないのでしょうか。
この問題に対しては、主に次の二つのソリューションがあります。
HttpPlatformHandler を利用して処理を HTTP リスナに転送する
マイクロソフトがサポートしている HttpPlatformHandler という IIS モジュールを利用すると、 IIS は必要に応じて外部プロセスを起動して HTTP 要求を転送します。
この仕組みを使って、Node プロセス (Node.exe) を起動して HTTP 要求を Node に処理させることができます。
CGI のインターフェイス仕様では nph CGI というのがあります。nph は Non-Parsed Header の略で、 CGIプロセス側でHTTPヘッダも含めて処理するタイプの CGI になります。HttpPlatformHandler では HTTP 要求に応じて必要に応じてプロセスを起動する、という点では CGI と似ていますし、 HTTP ヘッダーも十分操作できる点では nph CGI に近い動きをします。しかし、 起動されるプロセス側では待ち受けるポート番号を、特別な方法で受け取った番号に設定しないといけないなど、違いがあります。
次の記事では HttpPlatformHandler を使って、IIS 上で Node.js/Express をホストする方法を説明します。
IIS でリバースプロキシを構成して Node.js アプリケーションをホストする
一般に、「リバースプロキシ」というのは、クライアントからのリクエストを受け取り、必要に応じてさらにバックエンドのウェブサーバーにリクエストを転送する仕組みのことを言います。
IIS でリバースプロキシを構成することによって、ASP.NET アプリケーションと Node.js アプリケーションを共存させることができます。
次の記事では、IIS でリバースプロキシを構成し、Node.js 上の Express によるウェブサーバーにアクセスする方法について説明します。