[性能优化系列] 02. HTTP缓存控制
上文gzip的使用介绍了通过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基础站点配置的基础上,增加对各种资源的缓存机制,包括:
- js、css等静态资源缓存30d
- 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;
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。