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

如何解决Passenger运行Next.js13 App Router(src/app)应用的问题?

问题分析与解决方案

问题核心

使用Passenger部署Next.js 13.4.4 App Router(/src/app)应用时,出现process.env.PORT未定义的问题,而Pages路由的旧版本应用可正常运行。

解决方案

1. 修复启动代码的PORT兜底逻辑

当前代码中process.env.PORT未定义时无 fallback 值,Passenger生产环境可能未正确注入该变量,或是Next.js 13.4+ App Router模式下环境变量读取逻辑有变化。修改端口赋值逻辑:

// 替换原port赋值行,增加兜底值避免未定义
const port = !dev ? (process.env.PORT || 3000) : 8000;

2. 确保Passenger正确传递环境变量

  • 检查Passenger配置文件(如passenger.conf或虚拟主机配置),确认是否设置了PassengerEnvVar PORT,或确保Passenger允许传递系统环境变量。
  • 若使用Passenger应用启动脚本,可在脚本中显式设置PORT变量:
    export PORT=3000
    node your-start-file.js
    

3. 适配Next.js 13.4+官方启动方式

Next.js 13.4+推荐使用官方简化启动方式,避免手动创建HTTP服务器的兼容性问题:

const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });

app.prepare().then(() => {
  const port = !dev ? (process.env.PORT || 3000) : 8000;
  app.listen(port, (err) => {
    if (err) throw err;
    console.log(`Ready on http://localhost:${port}`);
  });
});

4. 验证环境变量注入情况

在启动代码开头增加日志,确认环境变量是否被正确读取:

console.log('NODE_ENV:', process.env.NODE_ENV);
console.log('Passenger PORT:', process.env.PORT);

若日志中PORT为undefined,说明Passenger未正确传递该变量,需重点排查Passenger的环境配置。


内容的提问来源于stack exchange,提问作者Geery.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:35