代理与缓存
2017-03-03 本文已影响0人
水墨小龙虾
正向代理与反向代理
正向代理的过程,它隐藏真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务器都被代理服务代替请求,比如浏览器访问google.com,被拦截,于是你在国外搭建一台代理服务器,让代理服务器请求google.com 代理把请求结果返回给我反向代理隐藏真实的服务端
![](https://img.haomeiwen.com/i4986443/61ee701fe9dacb8c.png)
当我们请求www.baidu.com时候,背后有很多服务器为我们服务,www.baidu.com就是我们的反向代理服务器,反向代理服务器会将请求转发到真实的服务器中
![](https://img.haomeiwen.com/i4986443/9b9d52aa31cffe6f.png)
两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端
node-http-proxy
一个支持反向代理和负载均衡的npm包
//以前你访问资源是从http://localhost:9000取得,现在通过反向代理服务器http://localhost:8000,他去请求9000端口的内容
var http = require('http'),
httpProxy = require('http-proxy');
// 创建代理服务器
httpProxy.createProxyServer({target:'http://localhost:9000'}).listen(8000);
// 创建目标服务器(http://localhost:9000)
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
(2)配置gzip压缩
开启网站的 gzip 压缩功能,通常可以高达70%,也就是说,如果你的网页有30K,压缩之后就变成9K, 对于大部分网站,显然可以明显提高浏览速度(注:需要浏览器支持)。
var compression = require('compression');
app.use(compression());
(3)配置http缓存:maxAge、etag、lastModified等
app.use(express.static(path.join(__dirname, 'public'),{maxAge:100,etag:true,lastModified:true}));
(4)配置combo
app.get('/javascripts', combo.combine({rootPath: path.join(__dirname, 'public')+'/javascripts'}), combo.respond);
app.get('/stylesheets', combo.combine({rootPath: path.join(__dirname, 'public')+'/stylesheets'}), combo.respond);
(5)配置ssi SSI是服务器端嵌入指令,在内容发送到浏览器之前,解析指令标签将其内容包含到网页中
expressSSI.init(express,'http://gome.com.cn');