mac代理连接失败主因是代理配置存在但服务未运行,或端口被误占;需先用env|grep -i proxy检查代理环境变量并清除,再用lsof -i :端口号确认实际占用情况。
mac 上因代理端口被占用导致连接失败(比如 failed to connect to 127.0.0.1 port 1087: connection refused),本质不是端口“被程序监听占用了”,而是系统或应用配置了代理,但代理服务本身没运行,或者监听的端口被其他进程意外占用了。解决需分两步:先确认是否真有代理配置干扰,再检查端口实际使用情况。
查清是不是代理设置惹的祸
很多看似“端口被占”的网络失败,其实是环境变量或系统级代理配置在起作用,而代理进程根本没启动:
- 在终端运行
env | grep -i proxy,看是否输出类似http_proxy=http://127.0.0.1:1087或ALL_PROXY=socks5://127.0.0.1:1086的内容 - 如果确实有,说明终端会强制走这个地址和端口;但若你没开 Clash、Surge、Proxyman 等代理工具,或它们已退出,就会报
Connection refused - 临时清除:执行
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY,再试 git 拉取或 curl 请求 - 永久清理:检查
~/.zshrc、~/.bash_profile或终端配置中是否误写了 export 代理语句,删掉或注释掉
确认该代理端口是否真被其他程序监听
只有当代理配置正确且代理工具本应运行时,才需要检查端口是否被别的进程抢用:
- 运行
lsof -i :1087(把 1087 换成你实际用的代理端口,如 1080、1086、7890 等) - 如果有输出,看 COMMAND 列(比如是
Clash、Surge、node或Python),再核对 PID 是否对应你正在运行的代理客户端 - 如果 COMMAND 是陌生进程(如
java、dotnet或测试服务),说明端口被误占,可用kill -9 PID释放 - 如果
lsof -i :1087无输出,说明端口空闲——问题一定出在代理未启动或配置错误,而非端口占用
代理工具自身启动异常的常见处理
即使端口空闲,代理工具也可能因配置错误、权限问题或后台残留无法监听:
- 重启代理客户端:完全退出(菜单栏右上角图标 → Quit),再重新打开;macOS 下注意检查是否启用「辅助功能」权限(系统设置 > 隐私与安全性 > 辅助功能)
- 检查代理工具日志:Clash for Mac 在「日志」页,Surge 在「Debug」页,看是否有
bind: address already in use或证书加载失败提示 - 换端口重试:在代理工具设置里把监听端口从 1087 改成 1088,再更新终端里的
export ALL_PROXY=socks5://127.0.0.1:1088,避免冲突 - 关掉系统代理开关:系统设置 > 网络 > 当前连接 > 详细信息 > 代理,确保「网页代理(HTTP)」和「安全网页代理(HTTPS)」等都未勾选(除非你明确需要全局系统代理)
代理端口连不上,八成是配置错或服务没起来,而不是端口真被占了。先砍掉干扰的环境变量,再盯住 lsof 输出看真相,比盲目 kill 进程更稳。










