在10分钟内构建Node.JS HTTP代理服务器

我们要建造什么?

今天我们将讨论如何构建一个复杂的代理服务器,它可以同时服务来自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为您的作品提供了一个很好的框架。因此,  是时候享受新建的代理服务器了。