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

Plesk上Node.js TCP服务器启动失败,提示端口未定义

问题诊断

你的核心问题是Passenger未正确传递PORT环境变量给Node.js TCP服务器,导致process.env.PORT为undefined,进而引发Passenger的进程启动失败日志。本地运行正常是因为你本地可能手动设置了PORT变量,或测试时直接指定了端口,不存在环境变量传递的问题。

另外,你尝试硬编码端口3000后仍未启动,大概率是以下原因之一:

  • Plesk服务器防火墙未开放目标端口
  • 目标端口已被其他进程占用
  • Passenger默认的HTTP应用托管模式,与TCP服务器的启动逻辑不兼容
解决方案

1. 让Passenger正确加载环境变量

Plesk自带的「自定义环境变量」功能主要为HTTP应用设计,Passenger不会自动读取该配置。需通过以下方式传递PORT:

  • 在Node.js项目根目录创建passenger_envvars文件,写入:
    PORT=3000
    
    保存后重启Plesk的Node.js应用服务。
  • 或者在Plesk的「Node.js设置」中,修改启动命令为:
    PORT=3000 node your-server-file.js
    
    替换your-server-file.js为你的实际入口文件名。

2. 硬编码端口并验证端口可用性

如果环境变量方式仍失效,直接在代码中指定端口,同时完成端口验证:

  • 修改代码中的端口定义:
    const serverPort = 3001; // 选一个未被占用的端口,避免冲突
    
  • 登录服务器终端,检查端口是否被占用:
    lsof -i :3001
    
    若有结果返回,更换其他端口。
  • 在Plesk的「防火墙」设置中,添加入站规则,允许TCP端口3001的外部访问。

3. 调整Passenger的应用类型配置

Passenger默认将Node.js应用识别为HTTP应用,需显式声明适配TCP服务器:

  • 在项目根目录创建Passengerfile.json,写入:
    {
      "app_type": "node",
      "startup_file": "your-server-file.js",
      "environment": "production"
    }
    
    确保startup_file指向你的TCP服务器入口文件。
验证步骤
  1. 重启Plesk的Node.js应用服务
  2. 在本地终端执行telnet your-server-ip 3001,测试是否能建立连接
  3. 查看Passenger日志和应用标准输出,确认无「Port undefined」类提示
额外注意事项
  • TCP服务器需要直接绑定端口,无法使用Passenger的反向代理功能,必须确保端口对外可访问
  • 若服务器为云主机,还需在云服务商的安全组中开放对应端口

内容的提问来源于stack exchange,提问作者Dr. PPSN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:04:57