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来作管理,这样能够把一台服务器上的全部服务都监管起来,利于开发调试。服务器

相关文章
相关标签/搜索