iisnode is Microsoft’s open-source IIS extension that hosts Node.js applications inside IIS worker processes, giving Node apps the same process management, logging, and uptime behavior as ASP.NET sites. Instead of running node server.js in a terminal that dies when you log out of RDP, IIS starts your app on boot, restarts it when it crashes, and routes HTTP traffic to it over a named pipe. For a Windows VPS that already runs IIS for other sites, adding Node through iisnode means one web server, one set of firewall rules, and one place to look at logs.
The setup takes about fifteen minutes on a fresh server, and it works with Node’s built-in HTTP server or Express without code changes. Before you start, make sure the VPS has enough RAM for both IIS and your Node process — a small Express app idles around 80–150 MB, but production workloads add up quickly. Our comparison table lists Windows VPS plans side by side, so you can match RAM and CPU to your expected request volume before deploying.
Installing Node.js and iisnode on the Server
Install Node.js from the official Windows MSI (the LTS version) and accept the default install path. Then download the iisnode release from the project’s GitHub repository and run its MSI installer, which registers the IIS module automatically. Verify both from an elevated prompt:
node --version
C:\Windows\System32\inetsrv\appcmd.exe list modules | findstr iisnode
If the module list does not show iisnode, restart IIS with iisreset and check again. The extension needs the URL Rewrite module only if you plan complex routing; for a basic site, iisnode handles the default server.js entry point on its own.
Creating an IIS Site That Runs Your Node App
Create a folder for the app, for example C:\inetpub\wwwroot\nodeapp, and copy your application files into it. The key piece is a web.config in the app root that tells IIS the entry point:
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode" />
</handlers>
</system.webServer>
</configuration>
Then create the site in IIS Manager (or with appcmd) pointing at that folder, with the default port 80 binding or a dedicated port. Restart the site, and browsing to http://your-vps-ip/ should hit your Node app. If you see a 500 error, check the iisnode log files in the app folder — they record why the Node process failed to start, which is usually a missing dependency or a wrong entry point in web.config.
Process Settings, Environment Variables, and Logging
iisnode reads its own configuration from <iisnode> in web.config. The settings that matter on a VPS:
<iisnode nodeProcessCountPerApplication="1" maxConcurrentRequestsPerProcess="1024" maxProcessCount="1" loggingEnabled="true" logDirectory="iisnode" />
nodeProcessCountPerApplication— how many Node processes serve the app; start with 1 and scale only if CPU-bound work saturates a single core.maxConcurrentRequestsPerProcess— the queue depth; raise it if you see “request queue full” errors under load.loggingEnabled— writes stdout/stderr to theiisnodesubfolder, which is where uncaught exceptions show up.
Set environment variables for the app either in IIS Manager (Configuration Editor → system.webServer/iisnode → environmentVariables) or directly in web.config:
<environmentVariables>
<add name="NODE_ENV" value="production" />
<add name="PORT" value="8841" />
</environmentVariables>
The PORT variable matters: under iisnode, Node listens on a named pipe, not a TCP port, so hardcoding listen(3000) in your app breaks it. Read process.env.PORT instead, which iisnode sets automatically.
Restarting and Updating the App Cleanly
Deploying a new version of a Node app on iisnode is the same drill as ASP.NET: drop a file named app_offline.htm into the app root, and IIS shuts down the Node process and returns that file’s content for every request. Copy your new files, delete app_offline.htm, and the next request starts a fresh process with the new code. For quick restarts without a full deploy, recycle the application pool that hosts the site — iisnode terminates and respawns the Node process on the next request. Check the iisnode log folder after each restart to confirm the process started cleanly and to catch startup exceptions early.
Because iisnode runs inside the application pool, the pool’s recycling schedule and idle timeout apply to your Node process as well. Set the idle timeout to 0 if the app must stay warm: after a recycled pool, the first request pays a cold-start penalty of a few hundred milliseconds while Node boots and loads modules, which is visible in your latency stats under light traffic.
Hosting Node under IIS gives you Windows-native process supervision, unified logs, and the same deployment workflow as your other IIS sites, with no separate daemon manager to maintain. It is a solid pattern for mixed .NET and Node workloads on a single Windows VPS. If you are still choosing where to run it, compare Windows VPS plans side by side to find a host with enough RAM for both stacks. For a low-cost start, InterServer’s Windows VPS plans include IIS and full admin access out of the box, and the TRYINTERSERVER promo code brings the first month to $0.01 so you can test iisnode without committing to a full billing cycle.



