PhpStorm通过SSH隧道配置XDebug调试问题咨询
从你提供的phpinfo信息和现有配置来看,核心的XDebug远程调试参数缺失,加上隧道和IDE配置可能存在需要验证的点,以下是一步步的排查和修复方案:
1. 补全XDebug核心远程调试配置
你的phpinfo输出里没有显示xdebug.remote_enable、xdebug.remote_host、xdebug.remote_port这些关键参数——而XDebug 2.x(你用的是2.6.0版本)必须配置这些才能发起调试连接。
登录到Ubuntu服务器,找到PHP的XDebug配置文件(通常路径是/etc/php/7.x/mods-available/xdebug.ini,具体路径根据你的PHP版本调整),添加或修改以下内容:
xdebug.remote_enable = 1 xdebug.remote_host = 127.0.0.1 xdebug.remote_port = 9000 xdebug.remote_autostart = 1 xdebug.idekey = XDEBUG_ECLIPSE
xdebug.remote_enable=1:强制开启远程调试功能xdebug.remote_host=127.0.0.1:因为你用了SSH远程端口转发R9000 localhost:9000,服务器上的XDebug需要连接到本地回环的9000端口,这个请求会通过SSH隧道转发到你本地PhpStorm的监听端口xdebug.remote_autostart=1:自动启动调试会话,不需要手动通过浏览器书签触发(可选,但能大幅简化调试流程)xdebug.idekey:和你phpinfo里的XDEBUG_ECLIPSE保持一致,确保PhpStorm的IDE Key配置和这个值匹配
修改完成后,重启PHP服务生效:
# 以PHP7.0-FPM为例,根据你的实际版本调整 sudo service php7.0-fpm restart # 如果是Apache部署,还要重启Apache sudo service apache2 restart
2. 验证SSH隧道的正确性
你设置的远程端口转发R9000 localhost:9000逻辑是对的——在远程服务器上监听9000端口,当有请求连接时,通过SSH隧道转发到你本地机器的localhost:9000端口,但需要做两个验证:
- 服务器端:执行
netstat -tulpn | grep 9000,确认有sshd进程在监听9000端口 - 本地端:打开PhpStorm的调试监听(右上角的电话图标变绿即为开启),然后执行
lsof -i :9000(Mac/Linux)或netstat -ano | findstr 9000(Windows),确认PhpStorm在占用9000端口
如果本地9000端口被其他程序占用,可以修改PhpStorm的调试端口(路径:设置→Build, Execution, Deployment→Debugger→XDebug→Debug port),同时对应修改SSH隧道的转发端口和XDebug的remote_port参数。
3. 确认PhpStorm的调试配置
- 确保调试监听已开启:点击右上角的电话图标,状态为绿色才是正常监听
- 服务器配置匹配:在
Settings→Build, Execution, Deployment→Servers中,你的远程服务器配置的Debugger选项卡要选择XDebug,且Port设置为9000(和隧道、XDebug配置一致) - IDE Key一致:在
Settings→Languages & Frameworks→PHP→Debug→XDebug里,IDE key设置为XDEBUG_ECLIPSE,和XDebug配置完全匹配
4. 检查防火墙和网络限制
- 本地机器:确认Windows防火墙、第三方安全软件没有拦截9000端口的入站连接
- 远程服务器:执行
ufw status查看防火墙状态,确保允许本地回环的9000端口连接(通常默认允许,但如果有自定义规则需要检查)
5. 测试调试连接&排查日志
配置完成后,按以下步骤测试:
- 在PhpStorm的项目入口文件(比如
index.php)第一行设置断点 - 通过配置了动态代理(本地1024端口)的浏览器访问项目
- 如果开启了
xdebug.remote_autostart=1,此时应该自动触发调试会话;如果没开,需要在浏览器地址栏添加?XDEBUG_SESSION_START=XDEBUG_ECLIPSE参数触发
如果还是失败,可以开启XDebug日志排查:在xdebug.ini中添加
xdebug.remote_log = /var/log/xdebug.log
重启服务后再次触发调试,查看/var/log/xdebug.log,里面会记录XDebug尝试连接的地址、端口以及错误信息,能精准定位问题。
内容的提问来源于stack exchange,提问作者fabio.ivona

