You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用自定义服务器的前提下将NextJS部署到IISNode?

部署Next.js到IISNode并保留SSR/SSG功能的可行方案

核心思路

无需自定义服务器,直接使用Next.js官方的next start启动生产服务器,通过IISNode将IIS的请求转发至该官方服务器,即可完整保留SSR、SSG及ISR的原生功能——这是官方推荐的生产部署方式,不会丧失任何框架原生能力。

前置准备

  • 服务器需安装:IIS、IISNode、对应版本的Node.js(匹配你的Next.js版本要求)、URL Rewrite模块
  • 本地完成项目生产构建:执行next build生成.next目录,确保package.json中包含start脚本(默认是next start -p 3000,可按需修改端口)

web.config配置示例

<configuration>
  <system.webServer>
    <!-- 注册IISNode处理器 -->
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>

    <!-- URL重写规则:优先处理静态资源,动态请求转发至Next.js服务器 -->
    <rewrite>
      <rules>
        <!-- 直接处理Next.js生成的静态资源,跳过Node服务器 -->
        <rule name="NextStaticAssets" stopProcessing="true">
          <match url="^/_next/static/.*$" />
          <action type="Rewrite" url="{R:0}" />
        </rule>
        <!-- 处理根目录静态文件 -->
        <rule name="RootStaticFiles" stopProcessing="true">
          <match url="^/(favicon.ico|robots.txt|sitemap.xml)$" />
          <action type="Rewrite" url="{R:0}" />
        </rule>
        <!-- 所有非文件/非目录请求转发至Next.js服务器 -->
        <rule name="ForwardToNextServer">
          <match url=".*" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="server.js" />
        </rule>
      </rules>
    </rewrite>

    <!-- IISNode基础配置 -->
    <iisnode 
      node_env="production"
      nodeProcessCommandLine="&quot;C:\Program Files\nodejs\node.exe&quot;"
      logDirectory="iisnode/logs"
      debuggingEnabled="false"
    />

    <!-- 补充静态资源MIME类型,避免解析错误 -->
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".js" mimeType="application/javascript" />
    </staticContent>
  </system.webServer>
</configuration>

配套server.js脚本

IISNode需要一个入口脚本,这里我们仅做启动Next.js官方服务器的封装,并非自定义渲染逻辑:

const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')

// 固定为生产模式
const dev = false
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url, true)
    handle(req, res, parsedUrl)
  }).listen(process.env.PORT || 3000, (err) => {
    if (err) throw err
    console.log('Next.js production server started')
  })
})

关键注意事项

  • 部署到IIS的文件需包含:.next目录、server.js、package.json、next.config.js(如有)及所有项目静态资源
  • 服务器Node.js版本需与本地开发环境一致,避免兼容性问题
  • 若修改端口,需同步更新server.js监听端口、package.json的start脚本端口,以及IIS站点绑定配置
  • SSG生成的静态HTML会直接由IIS处理,性能更优;SSR请求则转发至Next.js官方服务器处理,完全保留原生渲染能力

内容的提问来源于stack exchange,提问作者Alvin Stefanus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:03:30