Next.js应用在cPanel共享主机部署报错及访问问题求助
解决cPanel共享主机部署Next.js应用的三类问题
问题1:WebAssembly内存不足错误(cPanel终端执行npm run start时)
错误日志:
> next-simple@0.1.0 dev > node server.js undefined:9898 return await WebAssembly.instantiate(mod, { ^ RangeError: WebAssembly.instantiate(): Out of memory: wasm memory at lazyllhttp (eval at requireWithFakeGlobalScope (/home/toirihoi/nodevenv/nextapp/18/lib/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js:64:3), <anonymous>:9898:32) Node.js v18.16.1
解决方法:
- 禁止在cPanel终端直接运行
npm run start,共享主机终端资源受限,Next.js开发模式启动会占用大量内存。 - 改用cPanel自带的Node.js应用管理器启动应用,它会自动分配适配的资源并管理进程。
- 提前在本地或SSH环境执行
npm run build完成生产构建,再将文件上传到cPanel,避免在资源受限环境做构建操作。
问题2:端口占用错误(SSH执行npm start时)
错误日志:
[nextapp (18)] [toirihoi@server3 nextapp]$ npm start > next-simple@0.1.0 start > NODE_ENV=production node server.js Error: listen EADDRINUSE: address already in use :::3000 at Server.setupListenHandle [as _listen2] (node:net:1740:16) at listenInCluster (node:net:1788:12) at Server.listen (node:net:1876:7) at /home/toirihoi/nextapp/server.js:37:10 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { code: 'EADDRINUSE', errno: -98, syscall: 'listen', address: '::', port: 3000 }
解决方法:
- 共享主机3000端口大概率被其他应用占用,不要硬编码端口,直接使用cPanel分配的环境变量端口,修改
server.js:// 移除硬编码的3000,直接读取环境变量 const port = process.env.PORT - 不要通过SSH手动启动
npm start,cPanel的Node.js管理器会自动分配可用端口,并通过Passenger反向代理到你的域名,手动启动的应用无法通过外部域名访问。
问题3:端口改3001启动成功但浏览器404
错误日志:
[nextapp (18)] [toirihoi@server3 nextapp]$ npm start > next-simple@0.1.0 start > NODE_ENV=production node server.js > Ready on http://localhost:3001 http://localhost:3001
解决方法:
- 共享主机的本地端口(如3001)无法直接通过外部浏览器访问,必须依赖cPanel的Passenger代理转发。
- 正确操作步骤:
- 在cPanel的Node.js应用管理器中,确认应用根目录指向
nextapp文件夹,启动文件设为server.js。 - 在本地或SSH环境执行
npm run build完成生产构建。 - 在Node.js管理器中点击启动或重启按钮,不要手动通过SSH启动。
- 访问你的绑定域名(而非
localhost:3001),Passenger会自动将请求转发到应用端口。
- 在cPanel的Node.js应用管理器中,确认应用根目录指向
- 额外检查:确认
.htaccess中的PassengerAppRoot和PassengerStartupFile路径与实际文件路径一致。
额外优化建议
- 修改
package.json的start脚本,去掉硬编码的NODE_ENV=production,cPanel的Node.js管理器会自动设置生产环境变量:"scripts": { "dev": "node server.js", "build": "next build", "start": "node server.js", "export": "next build && next export", "lint": "next lint" } - 若应用无需自定义路由逻辑,建议直接使用Next.js默认输出方式,减少自定义server带来的配置复杂度,更适配共享主机环境。
内容的提问来源于stack exchange,提问作者MHIS
相关产品推荐
相关产品推荐

