You need to enable JavaScript to run this app. 如何将以SSR为主的Next.js应用部署至IIS服务器
优惠活动
大模型
产品
解决方案
定价
更多

如何将以SSR为主的Next.js应用部署至IIS服务器

核心认知差异

你之前能直接迁移CRA打包产物跑通,本质是因为CRA输出的是完全独立的静态HTML、JS、CSS文件,不需要后端运行环境,IIS本身就具备静态文件托管能力。但SSR模式的Next.js需要常驻Node.js进程处理服务端渲染逻辑、动态数据请求、API路由,直接拷贝构建目录的方式根本无法运行,之前的静态部署逻辑完全不适用。

IIS下SSR Next.js 部署全流程

服务器前置准备

  • 安装与本地项目开发时大版本完全匹配的Node.js LTS运行时,版本不一致会直接出现构建产物兼容报错
  • 安装IIS官方扩展:URL Rewrite、Application Request Routing(ARR),二者是实现IIS反向代理的核心依赖,没有配置这两个组件无法完成请求转发

项目打包与文件准备

  • 修改next.config.js,固定Next.js生产服务的运行端口,避免进程随机分配端口导致代理失效
  • 执行next build完成生产构建,整理需要上传到服务器的文件清单:
    • .next构建输出目录
    • public静态资源目录
    • package.json、next.config.js配置文件
    • 项目中所有服务端依赖的源码文件(包括自定义服务入口、API路由、getServerSideProps/getStaticProps中引用的工具模块、环境变量文件)
  • 注意:不要单独拷贝.next目录上传,缺失服务端源码会直接触发模块找不到的运行错误

服务器端项目初始化

  • 将整理好的项目文件放到IIS站点对应的物理路径下,例如C:\sites\next-ssr
  • 在项目根目录执行npm install --production,仅安装生产环境依赖,避免冗余开发依赖占用服务器资源
  • 手动测试Next.js生产服务能否正常启动:执行npm run start -- -p 3000,在服务器本地通过http://localhost:3000访问,确认页面渲染、接口响应完全正常后再配置IIS规则

IIS反向代理配置

  • 打开对应站点的URL Rewrite配置面板,新增一条入站重写规则:匹配所有传入请求,重写目标地址为http://localhost:3000/{R:0}
  • 打开ARR代理配置面板,勾选启用代理,将代理超时时间调整为120秒,避免服务端渲染耗时较长时被IIS主动掐断请求
  • 清理之前为CRA静态站点配置的静态文件路由规则,否则会出现静态资源拦截、路由跳转异常的问题

进程保活配置

  • 全局安装PM2进程管理工具,通过PM2启动Next.js服务,配置开机自启、进程崩溃自动重启,避免服务器重启或Node进程意外退出导致站点不可访问
常见踩坑提示
  • 不要尝试让IIS直接托管.next目录下的文件实现SSR,所有服务端渲染逻辑必须由Node进程处理
  • 上传文件时务必带上生产环境的.env配置文件,缺失环境变量会直接导致服务端运行报错
  • 若出现样式、JS静态资源404的问题,优先检查URL Rewrite规则是否覆盖了/_next/static路径,确保这类请求被正确转发到Node服务,没有被IIS的静态文件处理逻辑拦截

内容的提问来源于stack exchange,提问作者Anfimov Vladimir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 08:54:04