正向代理 && 反向代理 ~ Proxy

2,164 阅读2分钟

正向代理一般是客户端设置的,类似于跳板机,代理访问外部资源

  • 访问原来无法访问的资源
  • 做缓存,加速访问
  • 对客户端访问授权,上网进行认证
  • 记录用户访问记录,对外隐藏用户信息

反向代理就是服务端设置的, webpack是反向的

  • 可以保证内网的安全,使用反向代理,提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,web服务是内网
  • 负载均衡

正向代理

访问一个服务器,这个服务器可以帮我们访问另一个服务

安装 http-proxy 模块

webpack 用的是 webpack-dev-server http-proxy-middlware

server.js

//写个服务
let http = require('http');

http.createServer(function (req,res) {
  res.end('google');
}).listen(3000);

proxy.js

//代理服务
let httpProxy = require('http-proxy');
let proxy = httpProxy.createProxyServer();
let http = require('http');
http.createServer(function (req,res) {
  proxy.web(req,res,{
    target:'http://localhost:3000'
  })
}).listen(8081);

test: 访问localhost:8080

反向代理

类似于虚拟主机 典型的有cdn 将内容分发到各服务器,访问的是代理服务器,用到了反响代理

应用假设想在一个电脑上挂两个网站

//www.zdl1.cn => content1 3000端口 //www.zdl2.cn => content2 4000端口

3000.js

//写个服务
let http = require('http');

http.createServer(function (req,res) {
  res.end('3000');
}).listen(3000);

4000.js

//写个服务
let http = require('http');

http.createServer(function (req,res) {
  res.end('4000');
}).listen(4000);

在自己电脑上找windows/systerm32/drivers/etc/hosts文件,(mac conmand + shift + g 输入/private/etc/搜索直接改)

proxy.js

let map = {
    'www.zdl1.cn' : 'http://127.0.0.1:3000',
    'www.zdl2.cn' : 'http://127.0.0.1:4000'
}

let http = require('http');
let httpProxy = require('http-proxy');

let proxy = httpProxy.createProxyServer();
let server = http.createServer(function (req,res) {
    let host = req.headers['host'];
    host = req.headers['host'].split(':')[0]
    console.log(host);
    proxy.web(req,res,{
        target: map[host]
    })
})
server.listen(80);

test: www.zdl1.cn

提示

  • 端口冲突,查看冲突的程序,cmd键入sudo lsof -i:80查看pid 然后kill pid就可以
  • nginx默认80端口,如果想换别的端口,需自行配置