反向代理使用归纳

反向代理使用归纳
John Doe首先打开控制面板,查看到代理的端口,后续用得到
Linux 服务器临时代理速查(SSH 反向隧道)
适用场景:Windows 本机有可用的 HTTP 代理,使用 SSH 连接远程 Linux 服务器,希望让服务器当前终端临时通过 Windows 代理联网(例如访问 GitHub、Hugging Face 或更新 Codex),不修改服务器全局配置。
这里准确的技术名称是 SSH 反向端口转发(reverse SSH port forwarding),不是网站的 Nginx 反向代理。
0. 我的连接参数
| 项目 | 当前配置 |
|---|---|
| 服务器地址 | 10.20.43.188 |
| SSH 端口 | 22 |
| SSH 用户 | shuqiang |
| Windows 本机 HTTP 代理 | 127.0.0.1:7897 |
| 服务器临时代理地址 | http://127.0.0.1:7897 |
| SSH 配置 | Windows 的 C:\.ssh\config |
SSH 配置示例(按实际密钥文件路径为准):
Host 10.20.43.188
HostName 10.20.43.188
Port 22
User shuqiang
IdentityFile C:\Users\Lenovo\.ssh\id_sha
注意:上面的
IdentityFile路径来自已有配置记录,文件名id_sha可能不完整;如果你现有 SSH 连接正常,无需更改。先确保 Windows 代理软件已开启,并确认 HTTP 代理端口是7897(代理软件的 SOCKS 端口不一定是 HTTP 端口)。
1. Windows PowerShell:建立 SSH 反向隧道
打开一个独立的 Windows PowerShell 窗口,执行:
ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:7890:127.0.0.1:7890 10.20.43.188
说明:
-R 127.0.0.1:7897:127.0.0.1:7897:将服务器的本地回环端口7897转发到 Windows 本机的127.0.0.1:7897。-N:只保持 SSH 隧道,不启动远程 Shell。ExitOnForwardFailure=yes:端口监听建立失败时直接报错并退出。PowerShell 没有输出并保持运行通常是正常现象;使用期间不要关闭窗口。
Linux 服务器 localhost:7897
│
▼
SSH 反向隧道
│
▼
Windows 本机 localhost:7897
│
▼
Windows 代理软件
│
▼
互联网
2. Linux 服务器终端:临时启用代理
在 VS Code Remote-SSH 的远程终端执行:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
这些环境变量只影响该终端及它启动的子进程,不会自动影响服务器其他用户或已经运行的程序,也不会写入 ~/.bashrc。
3. 快速检测
检查服务器端口是否在监听
ss -lnt | grep ':7897'
正常情况下能看到 127.0.0.1:7897 的 LISTEN 记录。
检查当前终端代理环境变量
printf '%s\n' "$http_proxy" "$https_proxy"
通过代理测试联网
curl -x http://127.0.0.1:7897 -I --connect-timeout 10 https://huggingface.co
curl -x http://127.0.0.1:7897 -I --connect-timeout 10 https://github.com
使用 -x 可以明确要求 curl 走该代理,不依赖环境变量。对于 HTTPS,HTTP/1.1 200 Connection established 表示代理已建立 CONNECT 隧道;还要继续查看后续目标网站的 HTTP 响应,才能确认访问成功。
可选:检查公网出口(可能受到代理规则影响):
curl -x http://127.0.0.1:7897 https://ipinfo.io/ip
4. 完成后关闭(不留全局设置)
在 Linux 当前终端取消环境变量:
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
检查:
env | grep -i proxy
如果仍有输出,请确认它们是否来自其他配置;新建终端也通常不会继承本次临时
export设置。
最后返回 Windows PowerShell 隧道窗口,按 Ctrl + C 终止 SSH 进程,释放远程端口。
5. 常见故障速查
| 现象 | 排查方式 |
|---|---|
remote port forwarding failed for listen port 7897 |
服务器上的 7897 可能已被占用;执行 `ss -lnt |
| SSH 连接失败/超时 | 先确认 ssh 10.20.43.188 能正常连接,且服务器端口、VPN/校园网络可达。 |
curl: (7) Failed to connect to 127.0.0.1 port 7897 |
检查 PowerShell 隧道是否仍运行,以及服务器端口是否监听。 |
| 端口已监听,但网站访问失败 | 确认 Windows 代理软件已启动且提供 HTTP 代理服务;Windows 本机可先测试 curl.exe -x http://127.0.0.1:7897 -I https://github.com。 |
| SSH 提示不允许转发 | 服务器端可能禁用了 TCP 转发;需要管理员检查 AllowTcpForwarding 等策略。 |
| 只在部分终端/程序中生效 | export 的作用域仅限当前 Shell 和子进程;在实际运行程序的终端重新设置。 |
| 更新 Codex 时提示令牌已撤销 | 这是身份验证问题,不是代理问题;可执行 codex logout、codex login 重新登录。 |
如果服务器端 7897 被占用
Windows PowerShell 改用服务器端 17897(Windows 代理仍使用 7897):
ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:17897:127.0.0.1:7897 10.20.43.188
随后 Linux 当前终端改为:
export http_proxy=http://127.0.0.1:17897
export https_proxy=http://127.0.0.1:17897
export HTTP_PROXY=http://127.0.0.1:17897
export HTTPS_PROXY=http://127.0.0.1:17897
6. 两分钟操作清单
- Windows:开启代理软件,确认 HTTP 代理端口
7897。 - Windows PowerShell:执行
ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:7897:127.0.0.1:7897 10.20.43.188,保持窗口打开。 - Linux:执行 4 行
export设置代理。 - Linux:执行
curl -x http://127.0.0.1:7897 -I https://github.com验证。 - 使用结束:Linux 执行
unset ...,Windows 隧道窗口按Ctrl + C。
安全提示: 以上转发绑定的是服务器的 127.0.0.1,不是 0.0.0.0;避免将代理端口意外开放到整个校园网/公网。不需要 sudo,也不建议将临时代理凭据或敏感 Token 写入脚本。





