node插件http-proxy實現反向代理

  最近本身動手作了一個微信小程序,是直接買的騰訊雲的小程序解決方案,怎麼說那,用起來仍是會遇到很多問題的,不過在交流羣裏仍是會有不少人幫助你的。node

  閒話少說,由於要再作一個別的服務,就想直接用這臺小程序的服務器就行了,可是服務器的80端口已經被小程序佔用了,因此只能使用反向代理,說白了就是完成端口的分發。咱們不妨以域名爲路由分發:凡是 AA.com 域名請求的,分發到 PHP 82 端口執行;凡是 BB.com 域名請求的,分發到 ASP 83 端口執行;…… 如此類推。固然這裏的端口只說說明用而已,您能夠任意配置,反正就是從 80 端口接收回來的請求,先做一次處理,進而分發。反向代理,通俗地講,就是左手轉右手而已。web

  放到我實際的項目裏面,先npm init一個新的項目,安裝http-proxy插件用來反向代理,這個服務佔用80接口,而後我把以前小程序佔用的80接口,改成了3000接口。(這個端口號你們隨便選)。npm

  在項目下面新建一個app.js文件,內容以下:小程序

 1 var http = require('http'), httpProxy = require('http-proxy');  
 2   
 3 // 新建一個代理 Proxy Server 對象  
 4 var proxy = httpProxy.createProxyServer({});  
 5   
 6 // 捕獲異常  
 7 proxy.on('error', function (err, req, res) {  
 8   res.writeHead(500, {  
 9     'Content-Type': 'text/plain'  
10   });  
11   res.end('Something went wrong. And we are reporting a custom error message.');  
12 });  
13     
14 // 在每次請求中,調用 proxy.web(req, res config) 方法進行請求分發  
15 var server = require('http').createServer(function(req, res) {  
16   // 在這裏能夠自定義你的路由分發  
17   var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;  
18   console.log("client ip:" + ip + ", host:" + host);  
19     
20   switch(host){  
21     case 'www.111.cn':   
22         proxy.web(req, res, { target: 'http://localhost:3000' });  
23     break;  
24     case 'vote.111.cn':  
25         proxy.web(req, res, { target: 'http://localhost:9527' });  
26     break;
27     default:  
28         res.writeHead(200, {  
29             'Content-Type': 'text/plain'  
30         });  
31         res.end('Welcome to my server!');  
32   }  
33 });  
34   
35 console.log("listening on port 80")  
36 server.listen(80);  

  如代碼所示,當訪問www.111.cn的時候,請求就被轉發到了3000接口上,訪問vote.111.cn時就被轉發到了9527這個接口上,本身當時很困惑的是怎麼在小程序的80接口上去作轉發,其實80是個獨立的服務,只作轉發這個一件事情,別的服務都要放到別的端口上去的。微信小程序

  用node作服務器的話,推薦你們用pm2來作管理,這樣能夠把一臺服務器上的全部服務都監管起來,利於開發調試。服務器

相關文章
相關標籤/搜索