你在服务器上设置了代理后,发现:

  • 可以访问外网
  • 不能访问服务器本地地址(如 localhost、127.0.0.1、内网IP)

这是代理设置中常见的问题,尤其是当你设置了全局 HTTP/HTTPS 代理时。本地访问也会被强制走代理,导致连接失败。


一、问题原因

你可能在服务器中设置了如下代理环境变量:

export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port

这样一来,所有 HTTP/HTTPS 请求(包括对 localhost, 127.0.0.1, 本地网卡IP 的访问)都会默认走代理,导致访问本地服务失败。


二、解决方法

✅ 方法一:设置 no_proxy 环境变量(推荐)

告诉系统 不对某些地址走代理,例如:

export no_proxy=localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8

如果你服务器的本地 IP 是 192.168.1.100,也可以显式加上:

export no_proxy=localhost,127.0.0.1,192.168.1.100

这样配置后,访问这些地址时将绕过代理。


✅ 方法二:访问本地服务时临时禁用代理

如果不想设置 no_proxy,可以在运行访问命令时临时屏蔽代理:

curl --noproxy '*' http://localhost:8000

或:

env -u http_proxy -u https_proxy curl http://localhost:8000

三、持久化配置

如果你在 .bashrc、.zshrc 或系统代理配置文件中设置了代理,记得一并设置 no_proxy 变量:

export http_proxy=http://your-proxy:port
export https_proxy=http://your-proxy:port
export no_proxy=localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8

执行:

source ~/.bashrc

或重启 shell 生效。


四、特殊情况补充

如果你用的是 pip、apt、docker、npm 等工具,它们也可能会继承这些环境变量。确保这些工具也支持 no_proxy 或使用局部配置方式。


如果你能提供具体访问失败的命令(如 curl、wget、requests、apt 等),我可以进一步帮你分析具体情况。

更多推荐