正向代理一般是客户端设置的,类似于跳板机,代理访问外部资源
- 访问原来无法访问的资源
- 做缓存,加速访问
- 对客户端访问授权,上网进行认证
- 记录用户访问记录,对外隐藏用户信息
反向代理就是服务端设置的, 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/
搜索直接改)
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端口,如果想换别的端口,需自行配置