如何将NextJS 13.3.4部署到IIS 7/10自有服务器?
在IIS 7/10托管NextJS 13.3.4应用的完整步骤
NextJS 13.3.4的部署分两种模式,需根据你的应用是否包含SSR(服务器端渲染)或API路由选择对应方案:
情况一:纯静态导出(无SSR/API路由)
如果你的应用仅使用静态页面(无动态渲染或API接口),可采用静态导出模式,部署流程最简单:
- 修改项目配置
在next.config.js中添加静态导出配置:/** @type {import('next').NextConfig} */ const nextConfig = { output: 'export', // 保留你原有的其他配置 } module.exports = nextConfig; - 重新构建项目
执行npm run build,此时项目根目录会生成out文件夹(替代原.next),这就是静态部署的全部文件。 - IIS配置
- 打开IIS管理器,创建新网站,物理路径选择
out文件夹,设置好域名、端口绑定 - 确保IIS已安装静态内容角色(若未安装,通过「服务器管理器-添加角色和功能」勾选安装)
- 解决单页应用刷新404问题:安装IIS官方的URL重写模块,然后在网站根目录创建
web.config,添加以下规则:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="NextJS Static Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/index.html" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
- 打开IIS管理器,创建新网站,物理路径选择
情况二:包含SSR/API路由(需Node.js服务)
若应用依赖SSR、ISR或API路由,需通过IIS反向代理将请求转发给Node.js运行的NextJS服务:
- 部署项目文件
- 将本地的
.next文件夹、package.json、package-lock.json上传至服务器目标目录 - 在服务器目录执行
npm install --production安装生产环境依赖
- 将本地的
- 托管Node.js服务
为避免关闭命令行后服务终止,推荐用PM2托管:- 服务器全局安装PM2:
npm install -g pm2 - 在项目目录启动服务:
pm2 start npm --name "next-app" -- start(默认启动3000端口,若端口冲突可在next.config.js中配置serverPort修改) - 设置开机自启:
pm2 save && pm2 startup
- 服务器全局安装PM2:
- IIS反向代理配置
- 安装IIS官方的URL重写模块和**应用程序请求路由(ARR)**模块(可通过Web平台安装程序获取)
- 打开IIS管理器,创建新网站,物理路径可任意指定(仅用于绑定配置),设置好域名、端口绑定
- 为网站添加反向代理规则:
打开网站的「URL重写」功能,添加规则:匹配URL为(.*),动作类型选择「反向代理」,目标服务器地址填http://localhost:3000,保存规则。也可直接在网站根目录创建web.config添加以下配置:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="NextJS Proxy" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:3000/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
通用注意事项
- IIS 7和IIS 10的操作流程基本一致,仅模块安装入口略有差异
- 确保Node.js服务端口未被占用,且IIS应用池身份、Node进程拥有项目文件的读取权限
- 若需HTTPS,在IIS网站绑定中添加SSL证书,同时确保反向代理规则兼容HTTPS请求
内容的提问来源于stack exchange,提问作者Hasan Shouman
相关产品推荐
相关产品推荐

