• node.js中使用 http-proxy 创建代理服务器


    代理,也称网络代理,是一种特殊网络服务,允许一个终端通过代理服务与另一个终端进行非直接的连接,这样利于安全和防止被攻击。

    代理服务器,就是代理网络用户去获取网络信息,就是信息的中转,负责转发。

    代理又分 正向代理 和 反向代理:

    正向代理:帮助局域网内的用户访问外面的服务。

    反向代理:帮助外面的用户访问局域网内部的服务。

    一、安装 http-proxy

    npm install http-proxy --save
    

      

    二、代理本地服务

    const http = require('http');
    const httpProxy = require('http-proxy');
    
    //创建一个代理服务
    const proxy = httpProxy.createProxyServer();
    
    //创建http服务器并监听8888端口
    let server = http.createServer(function (req, res) {
        //将用户的请求转发到本地9999端口上
        proxy.web(req, res, {
            target: 'http://localhost:9999'
        });
        //监听代理服务错误
        proxy.on('error', function (err) {
            console.log(err);
        });
    });
    server.listen(8888, '0.0.0.0');
    

    9999端口服务代码:

    const http = require('http');
    http.createServer(function (req, res) {
        res.end('port : 9999');
    }).listen(9999, '0.0.0.0');
    

    当们在本地访问 8888 端口时,proxy 会帮我们把请求代理到 9999 端口服务,然后返回数据。

    二、通过host实现多个虚拟主机,共用一个端口

    const http = require('http');
    const httpProxy = require('http-proxy');
    //创建一个代理服务
    const proxy = httpProxy.createProxyServer();
    
    //虚拟主机
    const hosts = {
        'www.a.me': 'http://localhost:8888',
        'www.b.me': 'http://localhost:9999',
    };
    
    //创建http服务器并监听80端口
    let server = http.createServer(function (req, res) {
        //获取主机名
        let host = req.headers['host'];
        host = host.split(':')[0];
        //根据主机名,找到要代理的服务
        let target = hosts[host];
        if (target) {
            proxy.web(req, res, {
                target: target
            });
            proxy.on('error', function (err) {
                console.log(err);
            });
        } else {
            res.end('end');
        }
    });
    server.listen(80, '0.0.0.0');
    

    8888.js服务代码:

    const http = require('http');
    http.createServer(function (req, res) {
        res.end('port : 8888');
    }).listen(8888, '0.0.0.0');
    

    9999.js服务代码:

    const http = require('http');
    http.createServer(function (req, res) {
        res.end('port : 9999');
    }).listen(9999, '0.0.0.0');
    

    注意 www.a.me 和 www.b.me 这两个域名需加入 C:WindowsSystem32driversetchosts 文件中。

    127.0.0.1 www.a.me
    127.0.0.1 www.b.me
    

    当我们访问 www.a.me 或 www.b.me 时,就会自动帮我们代理到指定端口的服务上去。

  • 相关阅读:
    AS3入门教程3流程控制
    C#里面的datagridview的使用
    .NET 2.0 WinForm Control DataGridView 数据绑定
    FLASH实用代码大全
    C#中回滚SQL语句
    AS3工程中的Loading的应用
    AS3类库资源大集合
    Flash(FLV)视频播放器开源代码大集合
    一位高手整理的IIS FAQ
    Flash ActionScript 3编程的总结
  • 原文地址:https://www.cnblogs.com/jkko123/p/10272723.html
Copyright © 2020-2023  润新知