Node.js 配置请求代理服务器实战:Axios与Request方案

作者:墨池时间:2026-11-01 00:34:57浏览:355

本文介绍在 Node.js 中配置代理服务器以应对高频请求被封禁的场景。详细讲解了 Squid 自建代理与阿布云第三方代理的区别,并提供了 Axios 和 Request 库的具体代码配置。针对 Axios 请求 HTTPS 时出现的 501 错误,给出了使用 axios-https-proxy-fix 或 tunnel 模块的解决方案,同时简述了 curl 命令行测试方法。

Node.js 配置请求代理服务器

先讨论一下应用场景,此前我编写过一个基于 Node.js 的小爬虫,一直仅作为练习项目使用。

某天不知为何有人频繁刷我的接口,导致我的 IP 被对方服务器拉黑。

有人建议我更换机器重新安装,但由于项目中依赖了图片处理库 sharp,重新安装过程较为繁琐,因此我决定研究是否可以通过配置代理服务器来解决这一问题。

Node.js 配置请求代理服务器

大致架构如上图所示,用户的请求最终都会经由我的服务器转发至目标服务器,这导致在高频率请求下容易被封禁。

因此,我可以请求代理服务器,甚至构建一个代理池,将请求分散到不同的代理节点上。

既然方案已确定,接下来就开始进行测试。

首先自行尝试实现,同时考察是否有现成的代理服务可用。

代理服务器

Squid

Squid 是一款应用层代理软件,提供缓存加速及应用层过滤功能。

我的服务器可视为客户端,通过 Squid 代理服务器向目标服务器发起请求,主要达到两个目的:

缓存部分请求,避免同一地址在短时间内发起大量重复请求。

隐藏客户端的真实 IP 地址。

Node.js 配置请求代理服务器

阿布云

阿布云是一家提供代理服务的厂商,其 HTTP 隧道功能可将每个请求从随机 IP 转发(每秒最多 5 个,上限 200 个,超出限制将返回 429 错误)。

在 Node.js 中如何配置代理服务器

Axios

若使用 Axios,Node.js 环境中支持 proxy 参数,参照官方文档配置即可。

const axios = require('axios');
// 要访问的目标页面
var targetUrl = "https://www.lilnong.top/cors/sf";
// 配置代理服务器信息
var proxy = {
    host: "8.8.8.8", //代理服务器地址
    port: 80,//端口
    auth: { // auth认证信息,阿布云那边有,squid 的话不需要
        username: '',password: ''
    }
};
// https://github.com/axios/axios#request-config
axios.get(targetUrl,{proxy:proxy})
    .then((response) => console.log(response.data))
    .catch((error) => console.log(error))

Axios 异常情况

配置代理服务器后,如何解决无法请求 HTTPS 地址的问题?

首先需明确两种情况:

  • HTTP 请求可以正常发起。
  • HTTPS 请求返回 501 错误。

该问题源于 Axios 的支持机制,有两种解决方法。

使用 axios-https-proxy-fix 版本替代原版 Axios。

使用 tunnel 模块处理隧道连接。

 axios('https://www.lilnong.top/cors/sf2',{
         proxy: false,
         httpsAgent: tunnel.httpsOverHttp({proxy:{
             host: '8.8.8.8',//代理服务器域名或者ip
             port: 80 //代理服务器端口
         }})
     })
     .then(v=>console.log(jsON.stringify(v.data)))
     .catch(v=>console.log(v.message))

Request

如果使用的不是 Axios,而是 Request 库,同样可以配置代理。

request({
    url:'https://www.lilnong.top/cors/sf3',
    proxy: 'http://8.8.8.8:80'//代理服务器地址 
    // "http://" + proxyUser + ":" + proxyPass + "@" + proxyHost + ":" + proxyPort;
}, function (error, response, body) {
    console.log('body:', body);
});

Request 异常情况

执行 npm install request 安装失败。

request has been deprecated, see https://github.com/request/request/issues/3142

由于 Request 不再开发新功能,官方不推荐继续使用。

同时因用户基数庞大,兼容性问题复杂,该库已转为维护模式。

此时可尝试使用 cnpm install request 进行安装。

其他测试请求代理服务器的方法

Curl

使用 Curl 可以在服务器上快速验证代理服务器是否生效。

curl -x "http://8.8.8.8:80" https://www.lilnong.top/cors/sf4

-x 参数用于设置代理服务器地址,注意 x 为小写。

请勿写错,大写 -X 用于设置请求方式(如 -X POST)。

总结

以上为个人经验分享,希望能提供参考,也希望大家多多支持本站。

作者最新文章