浏览器默认缓存了 hexo 的静态页面,即使我上传了新的文件也不会自动更新,如何解决?

2017-01-14 22:45:45 +08:00
 fourstring

如题。用 F12 可以看到服务端返回 304 状态码,问题是服务端文件已经更新了啊。

服务端是 nginx-1.11.8 ,配置文件里只指示浏览器缓存 js css 图片文件。

但是诡异的是,指示了缓存的这些文件却没有缓存,每次访问还是发送请求,服务端返回 200

下面是完整配置文件

server {
    server_name n4l.pw www.n4l.pw;
    listen 80;
    location ^~ /.well-known/acme-challenge/ {
        alias /home/wwwroot/challenges/;
        try_files $uri =404;
    }

    location / {
        rewrite ^/(.*)$ https://n4l.pw/$1 permanent;
    }
}
server {
    server_name n4l.pw www.n4l.pw;
    listen               443 ssl http2 reuseport fastopen=3;
    root /home/wwwroot/hexo;
    server_tokens        off;
    ssl_ct on;
    ssl_certificate      /root/ssl/fourstring/n4l.pw.rsa.pem;
    ssl_certificate_key  /root/ssl/fourstring/n4l.pw.rsa.key;
    ssl_ct_static_scts   /root/ssl/fourstring/scts/rsa;

    ssl_certificate      /root/ssl/fourstring/n4l.pw.ecc.pem;
    ssl_certificate_key  /root/ssl/fourstring/n4l.pw.ecc.key;
    ssl_ct_static_scts   /root/ssl/fourstring/scts/ecc;
    ssl_dhparam          /root/ssl/fourstring/dhparams.pem;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers  on;
    ssl_ecdh_curve secp384r1;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache          shared:SSL:50m;
    ssl_session_timeout        1d;
    ssl_session_tickets        on;
    ssl_stapling               on;
    ssl_stapling_verify        on;
    resolver                   8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout           10s;
    add_header    Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
    add_header    Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=";pin-sha256="Fbs+o+IxVNTHBpjNQYfX/TBnxPC+OWLYxQLEtqkrAfM=";max-age=2592000; includeSubDomains';
    index index.html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

(很多配置是学习了 ququ 大神的配置方法)

就我的了解来看,实际上就只有最后两段 location 是缓存,但是指定的这些缓存文件类型却没有被处理。

网站地址: https://n4l.pw 感谢您的回答。

4227 次点击
所在节点    Hexo
12 条回复
lbp0200
2017-01-14 22:55:52 +08:00
expires 30d;
是什么?
fashioncj
2017-01-14 23:32:04 +08:00
ctrl+F5 。。强制刷新就好了。。

或者。。 F12 清空缓存。。
fourstring
2017-01-15 13:35:13 +08:00
@lbp0200 设置对应后缀名的资源的过期时间
fourstring
2017-01-15 13:35:31 +08:00
@fashioncj 作为站长当然可以强制刷新,然而用户并不懂啊
402645707
2017-01-15 23:48:34 +08:00
这个和服务端缓存无关
你发给客户端的 max-age 太高了
fourstring
2017-01-16 08:35:06 +08:00
@402645707 max-age ??那是 HSTS 和 HPKP 的缓存时间啊,跟页面无关吧?用的是 Preload List 的推荐值啊
402645707
2017-01-16 10:30:00 +08:00
@fourstring 建议 f12 看看 http header 中的 max-age
fourstring
2017-01-16 10:44:49 +08:00
@402645707 我看了一下 header ,涉及到 max-age 的只有 HSTS 和 HPKP ,都是 HTTPS 的安全选项,和页面内容缓存无关
content-encoding:gzip
content-type:text/html
date:Mon, 16 Jan 2017 02:43:42 GMT
etag:W/"587a2ebf-4a42"
last-modified:Sat, 14 Jan 2017 13:59:27 GMT
public-key-pins:pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=";pin-sha256="Fbs+o+IxVNTHBpjNQYfX/TBnxPC+OWLYxQLEtqkrAfM=";max-age=2592000; includeSubDomains
server:nginx
status:200
strict-transport-security:max-age=31536000; includeSubDomains; preload
vary:Accept-Encoding
fourstring
2017-01-16 10:45:45 +08:00
@402645707 也就是没有 cache-control 头
402645707
2017-01-16 11:14:57 +08:00
@fourstring 没有的话就加一个缓存时限
fourstring
2017-01-16 12:52:00 +08:00
@402645707 好的,我试试
fourstring
2017-01-16 13:15:16 +08:00
@402645707 问题解决,非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX