我们要建造什么?
今天我们将讨论如何构建一个复杂的代理服务器,它可以同时服务来自Nodejs的HTTP和https请求。它将能够阻止某些URL访问。我会逐渐增加复杂性,因此我可以容纳来自不同专业水平的读者。即使您是Nodejs的初学者,您也会发现本教程非常容易理解。如果你是中间人,你会发现它很无聊。这是专门为在Ubuntu VPS上部署Nodejs代理而编写的,可用于配置Firefox浏览器。但是对于其他场景来说,这个过程也是一样的。
让我们从安装Nodejs开始。有几种方法可以安装Nodejs。我会在这里使用最方便的方法。
安装Node.js.
使用以下命令更新apt工具
sudo apt update
我们需要curl来获取节点包。所以,让我们先安装它。
sudo apt install curl
让我们用curl下载节点包。
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash –
是时候安装node.js了
sudo apt install nodejs
最后,在我们继续之前验证node.js是否已成功安装。
node -v
如果你正确地获得版本,那意味着你很高兴。
创建基本代理
在Nodejs中创建代理服务器非常简单。打开您喜欢的文本编辑器并复制下面的代码并将其另存为proxy.js。请注意,我们这里只发送一个简单的文字。因为我们的目的是检查我们的请求是否正确代理。
var http = require('http'); var proxy = require('http-proxy'); proxyServer = proxy.createProxyServer({target:'http://127.0.0.1:9000'}); proxyServer.listen(8000); server = http.createServer(function(req,res){ res.writeHead(200,{'Content-Type':'text / plain'}); res.write('代理请求成功!'+'\ n'+ JSON.stringify(req.headers,true,2)); 重发(); }); server.listen(9000);
使用以下命令运行该文件。
node proxy.js
这就是创建工作代理服务器所需的全部内容。要在浏览器中使用代理服务器,必须对其进行配置。打开Firefox浏览器并从右侧菜单转到选项,您可以在页面底部的常规选项卡下找到网络设置。
接下来,转到网络设置。
可能你已经很好地掌握了这些设置。我们可以在手动配置下配置新创建的代理服务器。请注意,我们的代理只能提供HTTP请求。
插入我在下图中显示的值。
是时候测试我们的代理服务器了。在浏览器中键入任何HTTP URL。我将访问http://www.espncricinfo.com。
很酷,我们得到了我们想要的回应。现在,除非出于初始测试目的,否则获得此响应将不会那么有用。是时候向客户提供他想要的东西,他要求的网站内容。为此,我们将修改我们的代码,如下所示。
var http = require('http'); var proxy = require('http-proxy'); var url = require('url'); proxyServer = proxy.createProxyServer({target:'http://127.0.0.1:9000'}); proxyServer.listen(8000); server = http.createServer(function(req,res){ 的console.log(req.url); proxyServer.web(req,res,{target:req.url}); proxyServer.on('error',function(e){ console.log(“代理调用错误”); }); }); server.listen(9000);
好的,再次运行你的脚本。打开浏览器并输入http://espncricifno.com
大。这次我们得到了我们想要的东西。我们可以看到网站的内容。
阻止URL。
如果您正在为员工开发代理服务器,那么您绝对不希望他们在Facebook上浪费时间。您可能有很多原因阻止用户访问某些网址。有时您不希望授予从代理服务器查看不适当站点的权限。您可能不希望让人们访问带有安全问题的网站,使用代理服务器访问非法网站。使用Nodejs,您只需几行就可以实现这一目标。
我们将创建一个名为blocked.txt的文件,并添加您要阻止的URL。接下来,我们使用自定义逻辑创建代理服务器,以防止访问它们。
将以下代码添加到代理服务器。
var blocked = []; fs.watchFile('./ blocked.txt',function(c,p){update_blocked_list();}); function update_blocked_list(){ sys.log(“更新被阻止的文件。”); blocked = fs.readFileSync('。/ blocked.txt')。split('\ n') .filter(function(rx){return rx.length}) .map(function(rx){return RegExp(rx)}); } http.createServer(function(request,response){ for(i in blocked){ if(blocked [i] .test(request.url)){ sys.log(“拒绝:”+ request.method +“”+ request.url); 到Response.End(); 返回; } } }
将http://facebook.com添加到您的文件中。运行该文件,然后从浏览器转到http://facebook.com。
好的,我们得到访问被拒绝的消息。现在,没有人能够访问Facebook
来自您的代理服务器。
在我们的代理服务器中启用HTTPS
你对目前为止所做的事情感到满意吗?但有一件事。我们的服务器仍然存在很大问题。即使您的客户无法访问http://facebook.com,您的客户也可以访问https://www.facebook.com。但是,这不是最糟糕的情况。尝试访问google.com。您是否看到无法访问http://www.google.com。因为Google没有HTTP网站。在当前的互联网中拥有一个仅HTTP代理几乎没用。所以,为什么要停在那里。让我们实现服务器到服务器https请求。
var fs = require('fs'); var http = require('http'), var https = require('https'), var httpProxy = require('http-proxy'); isHttps = true; var options = { ssl:{ key:fs.readFileSync('valid-key.pem'), cert:fs.readFileSync('valid-cert.pem') } }; proxyServer = proxy.createProxyServer({target:'http://127.0.0.1:9000'}); proxyServer.listen(8000); if(isHttps){ server = https.createServer(options.ssl,function(req,res){ console.log(“https request”); proxyServer.web(req,res,{target:req.url}); proxyServer.on('error',function(e){ console.log(“代理调用错误”); }); proxyServer.listen(443); }); }其他{ server = http.createServer(function(req,res){ 的console.log(req.url); proxyServer.web(req,res,{target:req.url}); proxyServer.on('error',function(e){ console.log(“代理调用错误”); }); }); } server.listen(9000);
现在,将Web浏览器配置为接受https请求。在网络配置页面中勾选“为所有请求使用此代理服务器”框。
而已。请尝试再次访问google.com。这次你会成功。您也可以尝试其他功能。Node.js为您的作品提供了一个很好的框架。因此, 是时候享受新建的代理服务器了。