如何使用Node.js创建简单的Image HTTP代理

什么是图像代理服务器?

代理服务器是您与您浏览的网站之间的中间服务器。它就像你和互联网之间的网关。  当您使用代理服务器时,您的请求首先由代理服务器使用。代理服务器检查请求。然后它连接到包含网站的真实服务器,并转发来自该服务器的数据。代理服务器提供各种级别的功能。例如,如果您在VPS上托管多个网站,则可以使用代理服务器根据请求中的URL将请求定向到不同的网站。

Nodejs介绍

JavaScript开发人员总是遭受无法执行服务器端代码的困扰。Node.js是作为药物开发的。Node.js不是一种编程语言,而是基于Chrome V8引擎构建的运行时环境,它使您能够在服务器端执行JavaScript。当然,Node.js包含一个丰富的JavaScript模块库,可以简化服务器端的开发。Node.js不仅仅取代了其他服务器端平台,而且还具有很大的潜力。您是否相信只需20行代码即可创建代理服务器?嗯,这就是你接下来要见证的。

在本指南中,我假设您正在安装一个安装了Ubuntu的VPS服务器。让我们从头开始,安装Node.js.

安装Node.js.

有两种方法可以在Ubuntu上安装Node.js. 您可以使用Ubuntu存储库,也可以通过PPA使用NodeSource。无论你使用什么方式,你都需要ubuntu的apt-get工具。如果你正在使用Ubuntu,你应该已经熟悉apt-get了。在下载任何软件包之前更新apt-get工具是一种很好的做法。

sudo apt-get update

使用Ubuntu存储库。

Ubuntu有一个丰富的软件包库。他们很乐意接受像Nodejs这样受欢迎的东西。在终端中键入以下命令。

sudo apt-get install nodejs npm

这是安装node.js的最简单方法。让我们检查一下Node.js是否安装成功。键入以下命令以获取版本。

node -v

如果您可以看到版本,则Nodejs已成功安装。但是,检查版本。这是一个有点旧的版本。这对于大多数Node.js应用程序来说已经足够了。如果您需要最新版本,则必须使用Nodesource存储库。Nodesource是node.js的主要供应商。他们维护着一个包含最新版本的存储库。

要通过Nodesource获取Node.js,您需要使用Curl。Curl是一个命令行工具,用于在服务器之间传输数据。在这里,我们将使用curl从Nodesource存储库下载Node.js.

sudo apt install curl

Node.js有两个版本。其中一个是LTS版本。LTS意味着长期支持。另一个是当前版本。除非您需要当前版本中的特定功能,否则建议使用LTS版本。所以,让我们明白吧。

curl -sL https://deb.nodesource.com/setup_10.x | sudo bash –

现在我们已经在我们的VPS上存储了Node.js存储库,我们必须安装它。

sudo apt install nodejs

让我们检查安装是否成功,一切都很好。

node -v

创建代理服务器

现在我们正在进入真正的工作。让我们首先了解我们的代理将做什么。此代理服务器将镜像传入的请求,然后创建相应的URL。然后它将被定向到第三方服务器。在此应用程序中,我将第三方服务器限制为Google.com。例如,如果客户端请求http://www.mydomain.com/images/srpr/logo11w.png,文件在http://www.google.com/images/srpr/logo11w.png将送达。那么,让我们开始吧。

正如我之前所说,Node.js在库中非常丰富。这些库称为模块。可能最常用的Nodejs模块是’http’模块。它定义了通过HTTP协议传输数据所需的功能。我们需要它来开发我们的代理服务器,它将服务于HTTP请求。

您可以使用’require’函数导入Node.js模块。

const http = require('http');

HTTP模块具有createServer功能,可用于构建Web服务器。

http.createServer(onRequest)。听(3000);

我的代理服务器将侦听端口'3000'。createServer函数将onRequest函数作为我们接下来要实现的参数。

function onRequest(request,response){

 console.log('serve:'+ request.url);

 //代理服务器代码

}

onRequest函数将把客户端请求和我们要发送给客户端的响应作为参数。我们将在onRequest函数中编写代理服务器实现。

接下来,我们将定义一组值作为选项。

  var options = {

    主机名:'www.google.com',

    港口:80,

    路径:request.url,

    方法:request.method,

    headers:request.headers

  };

以上选项值不言自明。接下来,我们编写代理对象的请求和响应。

  var proxy = http.request(options,function(res){

    response.writeHead(res.statusCode,res.headers)

    res.pipe(响应,{

      结束:是的

    });

  });

  request.pipe(proxy,{

    结束:是的

  });

你可以注意到我在这里使用了管道。管道在处理流方面很有效。在基于Node.js的HTTP服务器中,请求和响应是流。该请求是可读流,而响应是可写流。管道允许您从一个源读取数据并非常容易地写入目标。您不必像对待fs那样自己管理流程。

我们将所有代码放在一起。

var http = require('http');

http.createServer(onRequest)。听(3000);

function onRequest(request,response){

  console.log('serve:'+ request.url);

  var options = {

    主机名:'www.google.com',

    港口:80,

    路径:request.url,

    方法:request.method,

    headers:request.headers

  };

  var proxy = http.request(options,function(res){

    response.writeHead(res.statusCode,res.headers)

    res.pipe(响应,{

      结束:是的

    });

  });

  request.pipe(proxy,{

    结束:是的

  });

}

一切都很好。是时候让我们的文件运行了。将内容复制到文件名http_proxy.js并使用以下命令运行。

node http_proxy.js

而已。现在,您的Ubuntu服务器上运行的代理服务器已经运行。

测试代理服务器

让我们使用我们的Firefox浏览器测试我们的服务器。打开浏览器。使用端口正确键入地址栏中的URL / IP地址。  如果要在同一服务器上进行检查,则必须键入127.0.0.1作为IP地址。键入http://127.0.0.1:3000/images/srpr/logo11w.png在浏览器地址栏按回车键。

结论

恭喜!您可以在那里看到Google徽标。您有一个完美工作的HTTP代理服务器。您可以使用如此多的功能扩展此代理服务器。您可以阻止通过此代理服务器访问的某些URL。你还可以练习很多其他的东西。快乐代理!