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等都已經換了路徑,確定也就不會使用本地的緩存了。

相關文章
相關標籤/搜索