Heroku部署的Node.js/express.js服务远程调试报连接被规则集拒绝如何解决
问题原因
你遇到的connection not allowed by ruleset+EACCES报错,核心是Heroku远端的Node.js进程没有开启调试端口9229的公开监听,端口转发找不到可连接的目标服务。
正确调试步骤
1. 开启远端服务的调试模式
两种方案二选一即可:
- 方案1(无需改代码):执行命令给应用加启动参数,然后重启dyno
# 配置Node启动时自动开启调试,监听所有网卡的9229端口 heroku config:set NODE_OPTIONS="--inspect=0.0.0.0:9229" --app 替换为你的Heroku应用名 # 重启应用生效 heroku ps:restart --app 替换为你的Heroku应用名
- 方案2(改代码提交):修改项目根目录的
Procfile,把web进程的启动命令加上调试参数,比如原先是web: node index.js就改成:
web: node --inspect=0.0.0.0:9229 index.js
修改后提交代码推送到Heroku即可生效。
2. 验证远端调试端口正常监听
执行命令进入Heroku应用的shell环境,确认端口正常监听:
heroku run bash --app 替换为你的Heroku应用名 # 进入shell后执行 netstat -tulpn | grep 9229
如果能看到Node进程监听9229端口的输出就说明配置生效。
3. 修正本地调试配置
你现有的两套配置里第二套是正确的,第一套的address是占位符直接删掉即可,最终用这套配置就行:
{ "configurations": [ { "type": "node", "request": "attach", "name": "Remote Heroku: Debug Remote Server", "address": "localhost", "port": 9229, "protocol": "inspector", "localRoot": "${workspaceFolder}", "remoteRoot": "/app" } ] }
4. 执行端口转发并启动调试
- 先确认本地9229端口没有被占用:Mac/Linux执行
lsof -i:9229,Windows执行netstat -ano | findstr 9229,如果有其他进程占用就先关掉对应进程,或者把转发端口换成9230等未占用端口,同步修改VSCode配置里的port字段即可。 - 执行端口转发命令:
heroku ps:forward 9229 --app 替换为你的Heroku应用名
等终端输出Listening on 9229 and forwarding to web.1:9229之后,再启动VSCode的调试即可正常连接。
调试完成后的收尾操作
调试完一定要关闭调试模式,避免安全风险和性能损耗:
# 移除调试启动参数 heroku config:unset NODE_OPTIONS --app 替换为你的Heroku应用名 # 重启dyno生效 heroku ps:restart --app 替换为你的Heroku应用名
常见问题排查
- 如果还是报错,先检查本地防火墙、代理软件有没有拦截1080(Heroku转发默认用的SOCKS代理端口)或9229端口的连接。
- 用免费dyno的话,调试前先访问一次你的应用接口,把休眠的dyno唤醒,避免连接超时。
内容的提问来源于stack exchange,提问作者Kevv Keka
相关产品推荐
相关产品推荐

