美文网首页
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