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

NextJS 11生产环境API Routes 404问题求助

解决Next.js动态robots.txt API路由生产环境404问题

针对你在Cloud Run部署后出现的404问题,可从以下几个方向调整配置:

1. 确认Dockerfile配置正确性

Next.js生产部署推荐使用官方的standalone模式,确保API路由被正确打包:

  • 检查Dockerfile是否包含完整的构建产物复制步骤:
    # 构建阶段
    FROM node:18-alpine AS builder
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci
    COPY . .
    RUN npm run build
    
    # 生产阶段
    FROM node:18-alpine AS runner
    WORKDIR /app
    ENV NODE_ENV production
    RUN addgroup --system --gid 1001 nodejs
    RUN adduser --system --uid 1001 nextjs
    
    # 复制standalone构建文件(关键)
    COPY --from=builder /app/.next/standalone ./
    COPY --from=builder /app/.next/static ./.next/static
    COPY --from=builder /app/public ./public
    
    USER nextjs
    EXPOSE 3000
    ENV PORT 3000
    CMD ["node", "server.js"]
    
  • 避免使用next start作为启动命令,standalone模式下必须用node server.js启动,否则API路由可能无法被加载。

2. 验证next.config.js重写规则

确保重写规则配置正确,且生产环境未被覆盖:

module.exports = {
  async rewrites() {
    return [
      {
        source: '/robots.txt',
        destination: '/api/robots',
      },
    ];
  },
  // 若使用standalone模式,需确保以下配置开启(Next.js 12+默认开启)
  output: 'standalone',
};
  • 检查是否有环境变量或条件逻辑导致重写规则在生产环境未生效。

3. 确认API路由文件结构与写法

  • 确保API路由文件路径为src/pages/api/robots.js(或.ts),文件需导出默认处理函数:
    export default function handler(req, res) {
      res.setHeader('Content-Type', 'text/plain');
      res.write('User-agent: *\nAllow: /\n');
      res.end();
    }
    
  • 若使用TypeScript,需确保文件后缀为.ts,且类型定义正确。

4. 检查Cloud Run服务配置

  • 确认容器端口设置为3000,与Next.js运行端口一致。
  • 验证服务是否部署了最新的Docker镜像,可通过Cloud Run控制台查看镜像版本。
  • 检查Ingress规则,确保允许外部请求访问所有路径(默认配置即可,无需限制路径)。

5. 排查GitHub Actions构建过程

  • 查看构建日志,确认next build命令无报错,API路由文件被正常打包。
  • 检查是否有.gitignore规则错误排除了src/pages/api文件夹(本地正常则大概率不存在此问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:52:38