[性能优化系列] 01. gzip的使用
优化网站响应速度的第一件事就应该想到开启流量压缩,这是最简单,成本最低且非常有效果的手段。假如你的网站有大量静态资源(css、js等),或者大量静态页面, 那么开启gzip,效果将会非常明显。
Nginx的gzip配置
本文继续以nginx为例,apache原理类似,但具体配置请自行google。本文假设测试网址是www.typechodev.com
,安装的测试程序是typecho1.0正式版,启用默认主题。
现在假设nginx原始配置如下(未开启gzip的配置):
server {
listen 80;
listen [::]:80;
root /var/www/typechodev.com;
index index.php;
server_name www.typechodev.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php$request_uri;
}
location ~ \.php($|/.*)$ {
include snippets/fastcgi-php.conf;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
access_log /var/log/nginx/typechodev.access.log;
error_log /var/log/nginx/typechodev.error.log;
}
访问https://www.typechodev.com
首页,打开chrome的开发者工具,可以看到各个资源的流量大小。
接着,我们启用gzip,配置如下:
server {
listen 80;
listen [::]:80;
root /var/www/typechodev.com;
index index.php;
server_name www.typechodev.com;
### 这里开始gzip配置
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
### 这里结束gzip配置
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php$uri;
}
location ~ \.php($|/.*)$ {
include snippets/fastcgi-php.conf;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
access_log /var/log/nginx/typechodev.access.log;
error_log /var/log/nginx/typechodev.error.log;
}
继续对比相同页面的静态资源流量大小:
可以看到,grid.css这个文件,从原来的5.8KB,降到了1.3KB,降幅高达70%以上,可见效果非常好。
注意事项
- 不要对img等二进制类型进行压缩,性价比不高
jpg/png等二进制类型的文件,一般情况下都已经做过了优化,可压缩率一般已经不高,因此为了避免不必要的性能损耗,可以排除掉这种二进制类型的压缩。
- https需要关闭gzip,否则会有漏洞
如果你网站采用https方式连接,则建议关闭gzip压缩。相同的内容,其压缩长度是固定的(压缩比),如果https连接加上了gzip压缩,攻击者可以在不知道密钥的情况下,通过枚举遍历的方式,不断对比压缩长度,从而有可能猜出你连接中的cookie值,从而泄露认证信息。当然,如果你的网站只是个无具体业务的博客站,就不需要关心这个了。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。