美文网首页
node插件http-proxy实现反向代理

node插件http-proxy实现反向代理

作者: 贝灬小晖 | 来源:发表于2018-06-26 16:22 被阅读63次

node插件http-proxy实现反向代理

npm init一个新的项目,安装http-proxy插件用来反向代理,这个服务占用80接口,然后我把之前小程序占用的80接口,改为了3000接口。

var http = require('http'), httpProxy = require('http-proxy');

// 新建一个代理 Proxy Server 对象
var proxy = httpProxy.createProxyServer({});

// 捕获异常
proxy.on('error', function (err, req, res) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end('Something went wrong. And we are reporting a custom error message.');
});

// 在每次请求中,调用 proxy.web(req, res config) 方法进行请求分发
var server = require('http').createServer(function(req, res) {
// 在这里可以自定义你的路由分发
var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
console.log("client ip:" + ip + ", host:" + host);

switch(host){
case 'www.111.cn':
proxy.web(req, res, { target: 'http://localhost:3000' });
break;
case 'vote.111.cn':
proxy.web(req, res, { target: 'http://localhost:9527' });
break;
default:
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Welcome to my server!');
}
});

console.log("listening on port 80")
server.listen(80);

如代码所示,当访问www.111.cn的时候,请求就被转发到了3000接口上,访问vote.111.cn时就被转发到了9527这个接口上,自己当时很困惑的是怎么在小程序的80接口上去做转发,其实80是个独立的服务,只做转发这个一件事情,别的服务都要放到别的端口上去的。
  用node做服务器的话,推荐大家用pm2来做管理,这样可以把一台服务器上的所有服务都监管起来,利于开发调试。

反向代理:
我所理解的意思是,正常情况下
域名对应的 ip 是主动去监测 80端口.
但是我们的项目中用到了很多端口,因此需要代理转去其他端口,
在node 中 我们可以使用 http-proxy 进行端口的转发工作,
如上面的代码,我们根据 HOST 进行端口号的转发监测!
反向代理,说白了就是完成端口的分发

相关文章

网友评论

      本文标题:node插件http-proxy实现反向代理

      本文链接:https://www.haomeiwen.com/subject/hojmyftx.html