V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fourstring
V2EX  ›  Hexo

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

  •  
  •   fourstring · 2017-01-14 22:45:45 +08:00 · 4355 次点击
    这是一个创建于 2895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。用 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 感谢您的回答。

    12 条回复    2017-01-16 13:15:16 +08:00
    lbp0200
        1
    lbp0200  
       2017-01-14 22:55:52 +08:00
    expires 30d;
    是什么?
    fashioncj
        2
    fashioncj  
       2017-01-14 23:32:04 +08:00
    ctrl+F5 。。强制刷新就好了。。

    或者。。 F12 清空缓存。。
    fourstring
        3
    fourstring  
    OP
       2017-01-15 13:35:13 +08:00
    @lbp0200 设置对应后缀名的资源的过期时间
    fourstring
        4
    fourstring  
    OP
       2017-01-15 13:35:31 +08:00
    @fashioncj 作为站长当然可以强制刷新,然而用户并不懂啊
    402645707
        5
    402645707  
       2017-01-15 23:48:34 +08:00 via Android
    这个和服务端缓存无关
    你发给客户端的 max-age 太高了
    fourstring
        6
    fourstring  
    OP
       2017-01-16 08:35:06 +08:00
    @402645707 max-age ??那是 HSTS 和 HPKP 的缓存时间啊,跟页面无关吧?用的是 Preload List 的推荐值啊
    402645707
        7
    402645707  
       2017-01-16 10:30:00 +08:00 via Android
    @fourstring 建议 f12 看看 http header 中的 max-age
    fourstring
        8
    fourstring  
    OP
       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
        9
    fourstring  
    OP
       2017-01-16 10:45:45 +08:00
    @402645707 也就是没有 cache-control 头
    402645707
        10
    402645707  
       2017-01-16 11:14:57 +08:00 via Android   ❤️ 1
    @fourstring 没有的话就加一个缓存时限
    fourstring
        11
    fourstring  
    OP
       2017-01-16 12:52:00 +08:00
    @402645707 好的,我试试
    fourstring
        12
    fourstring  
    OP
       2017-01-16 13:15:16 +08:00   ❤️ 1
    @402645707 问题解决,非常感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:24 · PVG 02:24 · LAX 10:24 · JFK 13:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.