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

将本地Express+Node后端部署至带子域名的云服务器遇阻

解决Plesk+Apache环境下Express后端部署到子域名的问题

核心问题分析

不用单独部署服务器,你的问题出在没有配置反向代理,以及Node服务的运行方式、监听地址可能存在问题:

  • 直接访问api.mydomain.com:3000超时,大概率是服务器防火墙未对外开放3000端口,且这种带端口的访问不符合API域名的使用规范;
  • 访问api.mydomain.com/login出现Plesk错误页面,是因为Apache默认接管了80/443端口,没有把请求转发到你的Node服务。

具体解决步骤

1. 在Plesk中配置Apache反向代理

这是让子域名直接映射到Node服务的关键:

  • 登录Plesk面板,找到api.mydomain.com对应的「网站与域名」设置;
  • 进入「Apache & nginx 设置」(纯Apache环境找「附加Apache指令」);
  • 在「附加指令」的Apache区域添加以下规则:
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
  • 保存设置,Apache会自动重载配置,此时访问api.mydomain.com/login就会被转发到本地3000端口的Express服务。

2. 让Node服务后台稳定运行

直接通过npm run start启动的服务,SSH断开后会终止,必须用进程管理工具托管:

  • 安装PM2(常用Node进程管理器):
npm install -g pm2
  • 进入项目目录,启动服务并命名(方便管理):
pm2 start npm --name "api-mydomain" -- run start
  • 查看服务状态:
pm2 status
  • 设置开机自启(避免服务器重启后服务中断):
pm2 startup

执行命令后会生成一条系统级启动指令,复制并执行即可。

3. 调整Express服务的监听地址

确保你的Express代码监听的是0.0.0.0而非localhost,否则服务只能被本地进程访问,Apache无法转发请求:

// 替换原有的listen代码
app.listen(3000, '0.0.0.0', () => {
  console.log('Server running on 0.0.0.0:3000');
});

修改后用PM2重启服务:

pm2 restart api-mydomain

4. 防火墙配置(可选)

反向代理配置完成后,不需要对外暴露3000端口,只需要允许本地Apache访问该端口即可:

  • 查看当前防火墙状态:
ufw status
  • 允许本地访问3000端口:
ufw allow from 127.0.0.1 to any port 3000

如果之前对外开了3000端口,也可以关闭:

ufw deny 3000

关于是否需要单独部署服务器

完全不需要。Plesk本身支持在同一服务器上通过反向代理、端口隔离的方式运行多个站点和服务,只要你的Node服务使用的端口(比如3000)和其他服务不冲突,就可以和现有网站共存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:11