首頁  >  問答  >  主體

nginx 快取JS一小時,請問如何更新快取?

nginx 快取 JS一小時,如下

    location ~ .*\.(js|css)?$ {
        expires      1h;
    }

OK,這是沒有問題的,我要暫時刷新緩存,大不了加個後綴即可,例如:abc.js?v=123

那現在我線上調試好了,我想去掉後綴了,將abc.js?v=123還原到abc.js,但這個時候還被緩存中,請問怎麼破?

天蓬老师天蓬老师2713 天前806

全部回覆(8)我來回復

  • 習慣沉默

    習慣沉默2017-05-16 17:26:48

    你上面的規則只是在 header 中加上一條過期規則
    告訴瀏覽器,這個東西1小時候到期
    並不是nginx快取了

    回覆
    0
  • 黄舟

    黄舟2017-05-16 17:26:48

    這個快取是指你瀏覽器(客戶端,非nginx)緩存,一般情況下,Ctrl+R強制刷新就會去掉快取。
    或者清除你的瀏覽器快取就OK了。

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 17:26:48

    1. 保留後綴
    2. 修改檔名

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-16 17:26:48

    不是用一個purge清理模組嗎?

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:26:48

    grunt-rev

    Use the rev task together with yeoman/grunt-usemin for cache busting of static files in your app. This allows them to be cached forever by the browser.

    如此nginx的header設定永不過期即可。

    回覆
    0
  • 怪我咯

    怪我咯2017-05-16 17:26:48

    用東半球最好的前端解決方案-fis,有一套專門的解決方案。
    fis

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:26:48

    http://labs.frickle.com/nginx_ngx_cache_purge/README

    http {
        proxy_cache_path  /tmp/cache  keys_zone=tmpcache:10m;
    
        server {
            location / {
                proxy_pass         http://127.0.0.1:8000;
                proxy_cache        tmpcache;
                proxy_cache_key    $uri$is_args$args;
            }
    
            location ~ /purge(/.*) {
                allow              127.0.0.1;
                deny               all;
                proxy_cache_purge  tmpcache $is_args$args;
            }
        }
    }
    

    存取127.0.0.1/purge/abc.js即可刪除快取的檔案。
    configure時加上參數--add-module=/path/to/ngx_cache_purge即可加入這個第三方purge模組。

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 17:26:48

    類似於expires max-age e-tag這些頭部資訊是給前端瀏覽器用的快取頭,比如說你剛才設定的expires 一小時,那麼瀏覽器就會在請求完成後一小時後,每次請求這個檔案時都不會再和伺服器進行通信,而是每次都是使用本地的快取檔案。在這一小時內,只有瀏覽器清除快取或在開發者工具中禁用快取才能在和伺服器之間通信,否則在這個一個小時內,伺服器上的這個檔案做任何改動,都對瀏覽器沒有任何影響。

    回覆
    0
  • 取消回覆