我們要建造什麼?
今天我們將討論如何構建一個複雜的代理伺服器,它可以同時服務來自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為您的作品提供了一個很好的框架。因此, 是時候享受新建的代理伺服器了。