Axios请求时设置HTTP代理地址

2025-07-05 / 8 阅读 / 经验
背景:近期我在搭建 Docker 镜像站时,采用了Docker-Proxy工具,部署过程中使用了 HTTP 代理。当时系统已正确配置代理地址,Docker 也能正常访问 Docker Hub 拉取镜像;同时,我通过 docker 部署了 hubcmd-ui 服务,并为容器指定了 HTTP 相关代理配置。但在实际使用中,检索 Docker Hub 镜像时始终出现错误。排查后台日志发现,Axios 发起的每次请求均返回 400 错误。起初我误判为证书问题,经多次排查后,最终确定根源在于代理配置 ——Axios 默认不会自动读取容器设置的代理地址,这是由于其本身不具备读取操作系统代理设置的能力。在 Node.js 环境中,若需通过代理访问网络,必须对代理进行显式配置。因此,我对 hubcmd-ui 源码中请求 Docker Hub 的相关接口进行了针对性修改,以解决该问题。

其实主要核心代码就是下面重点标出的地方:

const HttpsProxyAgent = require('https-proxy-agent'); // 重点

const response = await axios.get(`${DOCKER_HUB_API}/search/repositories`, {
	httpsAgent: new HttpsProxyAgent('http://192.168.88.113:8080'),// 重点
	proxy: false, // 重点
	headers: {
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
		'Accept': 'application/json',
	},
	timeout: 10000
});
相关推荐