发布时间:2019-07-02编辑:佚名阅读(2146)
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
node.js开发的站点,如果你也是用了nginx实现反向代理。
那么在服务端可以轻松实现gzip压缩,让站点浏览更顺畅。
前提条件:node.js+nginx反向代理。
node.js 需要做的工作:
express 4.0以下版本:
app.use(express.compress()); //主要是这句 app.use(express.json()); app.use(express.urlencoded()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser());
为了让所有请求压缩,所以 compress 放在上面。
express 4.0以上版本(包含4.0)
var compress = require('compression'); app.use(compress());
4.0以上版本把中间件独立拿出来了。
所以首先需要你 rquire('compression')
点击这里查看express 3.5和express 4.0的主要区别
node.js 需要做的工作就是这么简单。
nginx需要做的工作:
打开nginx配置文件,修改配置,开启gzip开关
nano /usr/local/nginx/conf/nginx.conf
你自己服务器上的 nginx 不一定安装在 /usr/local/ 目录下,所以根据自己安装目录下查找 配置文件 nginx.conf
在 http 配置节点上加如下配置:
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; http ( //放上面配置节点 )
配置项含义
1) gzip
语法:gzip on/off
默认值:off
作用域:http, server, location
说明:开启或者关闭 gzip 模块,这里使用 on 表示启动
2) gzip_min_length
语法:gzip_min_length length
默认值:gzip_min_length 0
作用域:http, server, location
说明:设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。|
3) gzip_buffers
语法: gzip_buffers number size
默认值: gzip_buffers 4 4k/8k
作用域: http, server, location
说明:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k 代表以 16k 为单位,按照原始数据大小以 16k 为单位的4倍申请内存。
4) gzip_comp_level
语法: gzip_comp_level 1..9
默认值: gzip_comp_level 1
作用域: http, server, location
说明:gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。这里设置为 5。
5) gzip_types
语法: gzip_types mime-type [mime-type ...]
默认值: gzip_types text/html
作用域: http, server, location
说明:匹配MIME类型进行压缩,(无论是否指定)"text/html" 类型总是会被压缩的。这里设置为 application/x-javascript text/css application/xml。
常用的静态 type 有,看自己需要压缩的情况而定:
text/html text/plain text/css application/x-javascript text/javascript application/xml
OK,到这里基本服务端已经配置完毕,Nginx 只需要reload一下即可。
下面来测试一下,用curl来如何测试服务端已经开启gzip(测试条件是默认gzip_types,即只压缩text.html,其他type未压缩):
查看是否开启gzip,需要客户端加入:"Accept-Encoding: gzip, deflate" 头信息。
$ curl -I -H "Accept-Encoding: gzip, deflate" "http://localhost/tag.php"
HTTP/1.1 200 OK Server: nginx Date: Thu, 08 Mar 2012 07:23:46 GMT Content-Type: text/html Connection: close Content-Encoding: gzip
$ curl -I -H "Accept-Encoding: gzip, deflate" "http://localhost/style.css"
HTTP/1.1 200 OK Server: nginx Date: Thu, 08 Mar 2012 07:23:54 GMT Content-Type: text/css Connection: close Last-Modified: Tue, 27 Dec 2011 10:00:51 GMT ETag: "BC612352322D435769C4BDC03DDB2572" Content-Length: 22834
可以看出来了把。第二个示例没有被压缩。
开启网站的gzip压缩功能,通常可以高达70%,也就是说,如果你的网页有30K,压缩之后就变成9K,对于大部分网站,显然可以明显提高浏览速度(注:需要浏览器支持)。
测试工具:google speed
nodejs+express
对于nodejs + express框架,启用方法非常简单,启用compress()中间件即可,通过gzip/deflate压缩响应数据,这个中间件应该放置在所有的中间件最前面以保证所有的返回都是被压缩的。
代码如下:
app.use(express.logger()); app.use(express.compress()); app.use(express.static(__dirname + '/html')); app.use(express.methodOverride()); app.use(express.bodyParser());
nginx
编辑 nginx 的配置文件
sudo vi /etc/nginx/nginx.conf
在 Gzip Settings 中加入如下设置:
### Gzip Settings## gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 5; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
关键字: 网站 开启 gzip 压缩 功能 nodejs nginx
0人
0人
0人
0人