nginx的缓存设置 提高网站性能
对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存.
可以, 用到 nginx的expires设置 .
nginx中设置过期时间,非常简单,
在location或if段里,来写.
格式 expires [time|epoch|max|pff]
time:默认单位(s)
expires 30s;//缓存30秒 s(second)代表秒
expires 2h;//缓存2小时 h(hour)代表小时
expires 30d;//缓存2小时 d(day)代表天
expires 12m;//缓存12个月 m(month)代表月
epoch:指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。
max:指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。
-1:指定“Expires”的值为当前服务器时间-1s,即永远过期。(负数:Cache-Control: no-cache,正数或零:Cache-Control: max-age = #(# 为您指定时间的秒数))
off:不修改“Expires”和”Cache-Control”的值
(注意:服务器的日期要准确,如果服务器的日期落后于实际日期,可能导致缓存失效)
另: 304 也是一种很好的缓存手段
原理是: 服务器响应文件内容是,同时响应etag标签(内容的签名,内容一变,他也变), 和 last_modified_since 2个标签值
浏览器下次去请求时,头信息发送这两个标签, 服务器检测文件有没有发生变化,如无,直接头信息返回 etag,last_modified_since
浏览器知道内容无改变,于是直接调用本地缓存.
这个过程,也请求了服务器,但是传着的内容极少.
对于变化周期较短的,如静态html,js,css,比较适于用这个方式
例子location
server {
listen 80; #监听端口
server_name localohst; #监听域名
location / {
root /var/www/a.com; #根目录定位
index index.html;
}
location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {
expires 1d;#只对图片、JS及CSS缓存1天
}
}
例子if
server {
listen 80; #监听端口
server_name localohst; #监听域名
location / {
root /var/www/a.com; #根目录定位
index index.html;
if ($fastcgi_script_name ~* \.[jpg|jpeg|gif|png|js|css] ) {
expires 1d;#只对图片、JS及CSS缓存1天
}
}
}