[性能优化系列] 02. HTTP缓存控制

上文[gzip的使用][1]介绍了通过gzip方式减少http请求过程中的流量传输,减少流量的另一个有效方式就是缓存静态资源,譬如css/js/png/jpg等。但对于静态资源或者不常变动的资源,可以通过尽量利用浏览器或者中间网络设备的缓存功能,减少用户的资源请求量,从而提升用户端的页面响应性能。

## HTTP缓存的基本概念

Http的Cache-Control指定了请求和响应遵循的缓存机制。好的缓存机制可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担。

Cache-Control定义的字段已经浏览器缓存手段比较丰富,但本文不打算探讨这些具体的技术细节,本文的目的主要是让新同学知道可以通过缓存提供网页响应性能, 以及如何配置缓存。

> 不过需要注意,HTTP/1.0 缓存没有实现 Cache-Control,本文的缓存机制是基于HTTP/1.1的

## Nginx中配置expires

对nginx 来说,配置页面缓存的方法很简单,只要在`location`段中,使用`expires`就可以了。举例:

location ~* .(gif|jpg|jpeg|png) {
expires 3d;
}
本例子表示将gif/jpg/jpeg/png后缀的图片资源设置超时时间为3天。

**expires格式:**

– expires 30s; //表示把数据缓存30秒
– expires 30m;//表示把数据缓存30分
– expires 10h;//表示把数据缓存10小时
– expires 1d;//表示把数据缓存1天

**完整例子:**

以下是在nginx基础站点配置的基础上,增加对各种资源的缓存机制,包括:

1. js、css等静态资源缓存30d
2. png、jpeg等图片资源缓存365d

Nginx配置

server {
listen 80;
listen [::]:80;

root /var/www/typechodev.com;
index index.php;

server_name www.typechodev.com;

location / {
try_files $uri $uri/ =404;
}

location ~ .php($|/.*)$ {
include snippets/fastcgi-php.conf;

# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~.*.(js|css)?$ {
expires 30d;
}

location ~.*.(png|gif|jpg|jpeg|mp4|avi)?$ {
expires 365d;
}

access_log /var/log/nginx/typechodev.access.log;
error_log /var/log/nginx/typechodev.error.log;
}

[1]: https://www.typechodev.com/servers/performance_optimization_with_gzip.html

上一篇 2017-11-30 上午1:57
下一篇 2017-11-30 上午9:24