Ubuntu服务器部署Next.js应用:如何通过IP加端口访问?
解决Ubuntu下Next.js无法通过IP+端口访问的问题
核心问题:绑定地址与端口权限限制
Next.js 默认将服务绑定到 127.0.0.1(仅服务器本地可访问),而非 0.0.0.0(允许外部IP访问),这是外部无法访问的核心原因。此外,服务器防火墙或云服务商安全组未放行目标端口也会导致该问题。
1. 修改Next.js启动绑定地址
开发模式
- 临时启动:执行命令
需指定自定义端口(如8080)则执行:npm run dev -- -H 0.0.0.0npm run dev -- -H 0.0.0.0 -p 8080 - 永久修改:编辑项目根目录的
package.json,更新scripts中的dev命令:
之后直接执行"scripts": { "dev": "next dev -H 0.0.0.0", // 其他脚本内容... }npm run dev即可生效。
生产模式
先完成项目构建:
npm run build
- 临时启动:执行命令
指定端口示例:next start -H 0.0.0.0next start -H 0.0.0.0 -p 8080 - 永久修改:编辑
package.json的scripts,更新start命令:
之后执行"scripts": { "start": "next start -H 0.0.0.0", // 其他脚本内容... }npm run start即可。
2. 放行服务器端口(Ubuntu防火墙)
若使用ufw防火墙,需放行目标端口(以3000为例):
sudo ufw allow 3000/tcp sudo ufw reload
执行sudo ufw status确认规则已生效。
3. 检查云服务器安全组(云主机场景)
如果是云服务商(如阿里云、腾讯云等)提供的服务器,需在控制台安全组规则中添加入站规则,放行目标端口的TCP流量。
4. 验证服务监听状态
在服务器上执行以下命令(替换为你的端口),确认服务已绑定到0.0.0.0:
netstat -tulpn | grep 3000
输出中若包含0.0.0.0:3000则绑定正确;若为127.0.0.1:3000,需重新检查启动命令。
补充:使用进程管理器(如pm2)的情况
若用pm2管理Next.js进程,启动命令需带上绑定参数:
pm2 start npm --name "next-app" -- run start -- -H 0.0.0.0 -p 3000
内容的提问来源于stack exchange,提问作者Viscosity medium
相关产品推荐
相关产品推荐

