Nginx和缓存

一、默认Nginx配置的缓存

通常来讲,经过 nginx 静态资源服务器,会默认给资源带上强缓存、协商缓存的 header 字段。css

下面的 Nginx 配置基本跟默认配置同样,只是修改访问时指向的资源路径,咱们使用下面的 Nginx 配置来配置 Nginx 静态服务器:html

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;

        location =/ {
            root /usr/myTestData/web01;
            index index.html;
        }

        location ~* \.(html|gif|jpg|jpeg|css|js|png|ico|eot|ttf|woff|svg)$ {
            root /usr/myTestData/web01;
        }
    }
}

咱们给 web01 项目添加了首页 index.html、一个 css 文件和一张图片。第一次请求时,确定都是报 200,由于还未请求过该资源,都是须要从服务器获取,以下:android

 

当咱们再次请求时,经过 F5 刷新,能够看到在不一样浏览器中有不一样的表现:nginx

  • 在 Chrome 浏览器中:

index.html 文件:web

 

index.css 文件:浏览器

图片:缓存

 

  • 在Firefox浏览器中:

 

 index.html 文件:服务器

 

  • 在IE浏览器中:

能够看到,Chrome 和 Firefox、IE 不一样浏览器的表现不太同样,但默认都有协商缓存在里面。app

 

1.一、更新服务器资源(模拟生产部署)

咱们全量更新服务器上的 html、css、图片文件,模拟生产上的全量部署。tcp

部署完成后,经过在浏览器 F5 来进行更新。第一次请求以下:

 

index.html 文件:

 

能够看到,last-modified 已经发生了改变,同时你能够在页面上看到全部的资源都获得了更新。

第二次请求就获得了缓存:

 

上面是用 Firefox 浏览器演示的状况,若是是用 Chrome 浏览器可能会有点问题。在 Chrome 浏览器中,html 和 css 文件经过协商缓存能获得更新,可是图片资源不会获得更新,须要 ctrl+F5 进行强制更新才行。

 

通常项目在配置时,会配置不缓存 html 文件。缘由:html文件最容易碰到缓存问题,从新发版后,一旦客户端继续使用原来的缓存,那么在原来的缓存过时以前,没有任何办法去触使客户端更新,除非一个个通知android客户手动清除app缓存数据,通知IOS用户卸载重装。因此配置html缓存策略时要格外当心,通常能够不缓存 html 文件。其余静态资源(css、js、img)则配置缓存。缘由:此类资源改动较少,为了提高用户体验,通常都须要配置缓存,但反而不容易碰到缓存问题。由于如今的前程工程也都须要build,在build时工具会自动在文件名上加时间戳,这样一发新版时,只要客户端请求了新版的html,里面引用的js/css/jpg等都已经换了路径,确定也就不会使用本地的缓存了。

相关文章
相关标签/搜索