博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node.js中使用 http-proxy 创建代理服务器
阅读量:6076 次
发布时间:2019-06-20

本文共 1983 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

 

一、安装 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.me127.0.0.1 www.b.me

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

 

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

你可能感兴趣的文章
Mysql利用binlog恢复数据
查看>>
解决 Windows启动时要求验证
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
Gallery循环滑动
查看>>
Sql与C#中日期格式转换总结
查看>>
iOS开发流程总结
查看>>
hadoop datanode 启动出错
查看>>
js颜色拾取器
查看>>
IDEA使用(1)intellIJ idea 配置 svn
查看>>
WPF 降低.net framework到4.0
查看>>
数据管理DMS 全量SQL诊断:你的SQL是健康的蓝色,还是危险的红色?
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>