先来说说场景,之前我写过一个小爬虫,node写的,一直都是当做玩具来用的。某天不知道谁在刷我的接口,导致被拉黑了。
大佬让我换个机器重新装一下,但是因为我的里面用到了一个图片处理库 sharp 装起来很烦,然后就研究研究能不能搞个代理服务器。
大体是如上图,用户的请求最后都会通过我的服务器去请求对方服务器,这就导致频率一高就被封。
那么我可以请求代理服务器,甚至是做一个代理池,再把请求平均开。
既然方案定下来了,那么我们就要开始测试了。先找找自己怎么做,然后看看有没有现成的服务。
squid 是应用层的代理服务软件,它可以提供缓存加速、应用层过滤的功能。
我的服务器就可以理解为客户机,通过代理服务器请求对方服务器。可以达到两个目的
缓存一部分请求,防止同一地址,短时间内大量请求。
隐藏客户机ip
阿布云就是一个做代理的服务提供商,HTTP隧道可以让每个请求从一个随机 IP 转发(秒级5个,最高200个,超过会429)。
使用axios的话,Node中支持 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))
首先我们先确定两种情况
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))
如果我们使用的不是 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 has been deprecated, see https://github.com/request/request/issues/3142
因为 request 不会在开发新的功能了,不推荐再使用了。
也因为用的人实在太多了,需要考虑的兼容太多,所以整个库转为了维护。
这个时候我们可以试试用 cnpm install request 来装
使用 curl 我们可以在服务器上很快的看到代理服务器是否好使。
curl -x "http://8.8.8.8:80" https://www.lilnong.top/cors/sf4
-x 是设置代理服务器地址, x 是小写哦。别写错,大写的是设置请求方式 -X POST。
微信公众号:前端linong
当我们需要大量IP进行快节奏完成业绩的时候,很多人都会想到去IP代理服务商那里购买IP代理,所以我相信很多人对于IP代理这个词已经有一定的认识了,那么还有一个词叫做:在线代理ip网页代理
一般适用情况:1、两台都有外网IP,一台服务器请求资源通过另外一个服务器,本文重点讲第一种。2、两台服务器,其中一台服务器只有内网IP,另外一台服务器有公网和内网IP。
公司项目最近出现获取访问域名、端口、IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数据。
反向代理看上去看深奥,其实不然,只是因为汉语言文化的差异导致它看上去深奥。一般反派感觉都比较厉害和神秘。要理解反向代理,我们就不得不说一下正向代理。正向代理代理的对象是客户端;反向代理代理的对象是服务端
写在教程前:为什么要反向代理cloudflare?答:缩短路由,加快cloudflare节点到大陆用户的速度,用过cloudflare的用户应该知道,这家CDN的速度在除了大陆以外的地方访问都非常快,那么又没有什么办法使其对大陆访问良好呢?
调用 new Proxy() 可常见代替其它目标 (target) 对象的代理,它虚拟化了目标,所以二者看起来功能一致。代理可拦截JS引擎内部目标的底层对象操作,这些底层操作被拦截后会触发响应特定操作的陷阱函数。
多人协作模式下,修改代理比较麻烦,而且很容易某个开发人员会修改了vue.config.js文件后提交了。第一,很容易引起冲突。 第二,很容易出现代理错误,需要排查。而且现在微服务盛行
本地开发,代理访问,防止跨域(一般通过webpack配置代理即可),特殊情况如携带一些自定义的登录cookie则需要通过自己写node,作为一种server中间层,单线程异步可以缓解服务器压力
changeOrigin的属性值为一个布尔值,如果设置为true,那么本地会虚拟一个NODE服务端接收你的请求并代你发送该请求(中间件)。[本质上是本地开了一个服务器dev-server,所有的请求都通过这里转发出去。]
我们已经知道了什么是正向代理与反向代理,这次我们就讲一下Nginx的动静分离的案例,其实质运用的就是反向代理,专门用一台服务器代理服务器上的图片资源。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!