在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為您的作品提供了一個很好的框架。因此,  是時候享受新建的代理伺服器了。