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

Next.js 13(App Router)部署IIS后API路由失效及0B问题求助

Next.js 13 App Router API路由部署到IIS失效问题排查与解决

问题原因解析

1. 构建日志中/api/hello显示0B且标记为○(Static)的原因

Next.js 13 App Router的API路由机制和Next.js 12使用的Pages Router完全不同:

  • Pages Router的/api/hello属于服务器端路由(标记为λ),构建时会保留服务器端执行逻辑,依赖Node.js运行时处理请求。
  • 你日志中App Router下的/api/hello被标记为○(Static),说明Next.js将其识别为静态资源而非服务器端API,通常是因为:
    • API路由文件不符合App Router规范(比如文件名不是route.ts/js,或未导出HTTP方法);
    • 配置了output: 'export'强制静态导出,导致服务器端API逻辑被丢弃,最终输出空的静态资源(0B)。

2. IIS部署的核心差异

Next.js 12 Pages Router的API可以通过iisnode等模块直接在IIS中运行Node.js代码,但App Router的服务器端路由/API必须依赖Next.js官方的生产服务器运行,无法直接以静态文件形式部署到IIS。

解决步骤

1. 修正App Router API路由规范

确保你的API路由完全符合App Router要求:

  • 目录结构必须为:app/api/hello/route.ts(或.js)
  • 文件中必须导出对应HTTP方法,示例代码:
    // app/api/hello/route.ts
    export async function GET(request: Request) {
      return new Response('Hello from Next.js 13 API!', {
        status: 200,
        headers: { 'Content-Type': 'text/plain' }
      })
    }
    
    重新执行npm run build,此时/api/hello应该会被识别为服务器端路由(若使用output: 'standalone'会显示对应的服务器chunk)。

2. 调整IIS部署方式

App Router应用不能直接作为静态站点部署,需要通过反向代理将IIS请求转发到Next.js生产服务器:

  1. 安装依赖模块:在IIS中安装Application Request Routing (ARR)和URL Rewrite模块。
  2. 启动Next.js生产服务器:
    • 构建应用:npm run build
    • 启动服务器:npm start(默认监听3000端口,可通过PORT环境变量修改)
  3. 配置IIS反向代理:
    • 在IIS中创建新网站,物理路径可设为任意目录(无需指向build文件夹);
    • 添加URL重写规则,将所有请求转发到http://localhost:3000,示例web.config:
      <configuration>
        <system.webServer>
          <rewrite>
            <rules>
              <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://localhost:3000/{R:1}" />
              </rule>
            </rules>
          </rewrite>
        </system.webServer>
      </configuration>
      
  4. 测试API路由:访问http://你的IIS域名/api/hello,应该能正常返回响应。

3. 检查Next.js配置

打开next.config.js,确保没有以下配置:

module.exports = {
  output: 'export' // 该配置会强制静态导出,不支持服务器端API
}

若需要精简服务器部署包,可使用output: 'standalone',它会生成包含所有依赖的独立服务器包,方便部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:53