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:\Windows\System32\drivers\etc\hosts 文件中。

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

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

 

转载于:https://www.cnblogs.com/jkko123/p/10272723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值