{"id":552,"date":"2026-08-05T23:00:24","date_gmt":"2026-08-05T23:00:24","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=552"},"modified":"2026-08-05T23:00:24","modified_gmt":"2026-08-05T23:00:24","slug":"running-node-js-on-iis-with-iisnode-windows-vps","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/","title":{"rendered":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">iisnode is Microsoft&#8217;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 <code>node server.js<\/code> 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The setup takes about fifteen minutes on a fresh server, and it works with Node&#8217;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 \u2014 a small Express app idles around 80\u2013150 MB, but production workloads add up quickly. <a href=\"https:\/\/windows-vps.org\/#providers\">Our comparison table<\/a> lists Windows VPS plans side by side, so you can match RAM and CPU to your expected request volume before deploying.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing Node.js and iisnode on the Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">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&#8217;s GitHub repository and run its MSI installer, which registers the IIS module automatically. Verify both from an elevated prompt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>node --version\nC:\\Windows\\System32\\inetsrv\\appcmd.exe list modules | findstr iisnode<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the module list does not show <code>iisnode<\/code>, restart IIS with <code>iisreset<\/code> and check again. The extension needs the URL Rewrite module only if you plan complex routing; for a basic site, iisnode handles the default <code>server.js<\/code> entry point on its own.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating an IIS Site That Runs Your Node App<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a folder for the app, for example <code>C:\\inetpub\\wwwroot\\nodeapp<\/code>, and copy your application files into it. The key piece is a <code>web.config<\/code> in the app root that tells IIS the entry point:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;configuration&gt;\n  &lt;system.webServer&gt;\n    &lt;handlers&gt;\n      &lt;add name=\"iisnode\" path=\"server.js\" verb=\"*\" modules=\"iisnode\" \/&gt;\n    &lt;\/handlers&gt;\n  &lt;\/system.webServer&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then create the site in IIS Manager (or with <code>appcmd<\/code>) pointing at that folder, with the default port 80 binding or a dedicated port. Restart the site, and browsing to <code>http:\/\/your-vps-ip\/<\/code> should hit your Node app. If you see a 500 error, check the <code>iisnode<\/code> log files in the app folder \u2014 they record why the Node process failed to start, which is usually a missing dependency or a wrong entry point in <code>web.config<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Process Settings, Environment Variables, and Logging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">iisnode reads its own configuration from <code>&lt;iisnode&gt;<\/code> in <code>web.config<\/code>. The settings that matter on a VPS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;iisnode nodeProcessCountPerApplication=\"1\" maxConcurrentRequestsPerProcess=\"1024\" maxProcessCount=\"1\" loggingEnabled=\"true\" logDirectory=\"iisnode\" \/&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><code>nodeProcessCountPerApplication<\/code> \u2014 how many Node processes serve the app; start with 1 and scale only if CPU-bound work saturates a single core.<\/li><li><code>maxConcurrentRequestsPerProcess<\/code> \u2014 the queue depth; raise it if you see &#8220;request queue full&#8221; errors under load.<\/li><li><code>loggingEnabled<\/code> \u2014 writes stdout\/stderr to the <code>iisnode<\/code> subfolder, which is where uncaught exceptions show up.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Set environment variables for the app either in IIS Manager (Configuration Editor \u2192 <code>system.webServer\/iisnode<\/code> \u2192 environmentVariables) or directly in <code>web.config<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;environmentVariables&gt;\n  &lt;add name=\"NODE_ENV\" value=\"production\" \/&gt;\n  &lt;add name=\"PORT\" value=\"8841\" \/&gt;\n&lt;\/environmentVariables&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>PORT<\/code> variable matters: under iisnode, Node listens on a named pipe, not a TCP port, so hardcoding <code>listen(3000)<\/code> in your app breaks it. Read <code>process.env.PORT<\/code> instead, which iisnode sets automatically.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Restarting and Updating the App Cleanly<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deploying a new version of a Node app on iisnode is the same drill as ASP.NET: drop a file named <code>app_offline.htm<\/code> into the app root, and IIS shuts down the Node process and returns that file&#8217;s content for every request. Copy your new files, delete <code>app_offline.htm<\/code>, 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 \u2014 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because iisnode runs inside the application pool, the pool&#8217;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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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, <a href=\"https:\/\/windows-vps.org\/#providers\">compare Windows VPS plans side by side<\/a> to find a host with enough RAM for both stacks. For a low-cost start, <a href=\"https:\/\/interserver.net\/r\/1067805?url=interserver.net\/vps\/windows-vps.html\" rel=\"noreferrer noopener sponsored\" target=\"_blank\">InterServer&#8217;s Windows VPS plans<\/a> include IIS and full admin access out of the box, and the <strong>TRYINTERSERVER<\/strong> promo code brings the first month to $0.01 so you can test iisnode without committing to a full billing cycle.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>iisnode is Microsoft&#8217;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, &#8230; <a title=\"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\" aria-label=\"Read more about Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-552","post","type-post","status-publish","format-standard","hentry","category-tutorials-guides"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management - Windows VPS Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management\" \/>\n<meta property=\"og:description\" content=\"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-05T23:00:24+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\",\"name\":\"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-08-05T23:00:24+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management - Windows VPS Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/","og_locale":"en_US","og_type":"article","og_title":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management","og_description":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management","og_url":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-08-05T23:00:24+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"windows-vps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/","url":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/","name":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-08-05T23:00:24+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/running-node-js-on-iis-with-iisnode-windows-vps\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Running Node.js on IIS with iisnode: Windows VPS Setup and Process Management"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=552"}],"version-history":[{"count":1,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/552\/revisions"}],"predecessor-version":[{"id":553,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/552\/revisions\/553"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}