AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 460328
Accepted
orokusaki
orokusaki
Asked: 2012-12-23 13:55:40 +0800 CST2012-12-23 13:55:40 +0800 CST 2012-12-23 13:55:40 +0800 CST

我怎样才能让 Nginx 告诉 Firefox 缓存我的内容?

  • 772

以下标头(来自静态媒体响应)不会导致在 Firefox 中进行缓存。在 Chrome 中他们这样做。

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 22 Dec 2012 21:20:39 GMT
Content-Type: application/x-javascript; charset=utf-8
Last-Modified: Fri, 21 Dec 2012 19:28:54 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: public, max-age=86400
Content-Encoding: gzip

我的静态内容 Nginx 服务器如下所示:

server {
    listen 80;
    server_name static.example.com;

    # Logs
    access_log /var/log/nginx/static.example.com.access.log;
    error_log /var/log/nginx/static.example.com.error.log;

    # Root
    location / {
        alias /var/www/app/deps/current/repo/src/example/static/;
        add_header Cache-Control "public, max-age=86400";
    }
}

我也尝试过使用expires 24h;, 代替add_header ..., 没有运气。

我在 Internet 上发现了许多类似的投诉,但没有解决方案,也没有任何关于为什么会这样的想法,除了一个人提到 Firefox 如何故意偏离处理 HTTP 1.1Cache-Control标头的规范。

有没有办法让 Firefox 通过一个或多个标头缓存我的静态媒体?我不希望 75% 的服务器静态媒体请求来自 20% 的用户,仅仅因为 Firefox 被破坏了。

请注意,我使用的是具有默认设置的 Firefox 17.0.1,但安装了 Firebug 并打开了Net选项卡。

更新:

相反,使用:

expires 1d;
add_header Cache-Control public;

导致标头包括:

Expires: Wed, 26 Dec 2012 19:54:20 GMT
Cache-Control: max-age=604800, public

这也不会导致 Firefox 缓存内容。

nginx
  • 2 2 个回答
  • 2774 Views

2 个回答

  • Voted
  1. Best Answer
    cnst
    2013-01-05T11:33:09+08:002013-01-05T11:33:09+08:00

    你如何确定 Firefox 没有缓存你的文件?

    当Last-Modified响应中出现标头时,浏览器应该对带有If-Modified-Since标头的同一 URL 发出所有后续请求,然后如果文件尚未被发送,来自服务器的响应可能仅包含标头(没有正文)修改自。

    IIRC,Gecko 还会查看Last-Modified日期的年龄。如果它是相对较新的,那么只有内容一直在变化并且必须经常重新请求(使用 aIf-Modified-Since或类似内容)才有意义。另一方面,如果日期是数周、数月或数年之久,则内容可能会被缓存很长时间。

    另一件要看的事情:你的 Firefox 机器上的时区和时间真的正确吗?

    • 1
  2. rhasti
    2012-12-23T15:01:05+08:002012-12-23T15:01:05+08:00
    server {
        expires    1d;
        add_header Cache-Control public;
        listen 80;
        ....
    }
    

    请像nginx 文档中描述的那样尝试这种方式


    所以我很好奇并尝试使用下面的配置缓存自己。我改变的是我在 localhost:4567 上启动了一个应用程序。而在外部网站中配置了 proxypass。或多或少像我能找到的大多数缓存示例。

    user nginx; worker_processes 2;
    error_log /var/log/nginxtesterror.log; pid /run/nginx.pid;
    events { worker_connections 1024; }
    http { include /etc/nginx/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 /var/log/nginx/access.log main;
        sendfile on; #tcp_nopush on; keepalive_timeout 65;
        proxy_cache_path
        /var/www/app/deps/current/repo/src/example/static/ levels=1:1:2
        keys_zone=one:200m max_size=1000m loader_files=2000 inactive=60m;
        proxy_temp_path /var/www/app/deps/current/repo/src/example/tmp;
        proxy_cache_valid 1d;
        gzip on; gzip_disable msie6; gzip_static on; gzip_comp_level 4;
        gzip_proxied any; gzip_types text/plain text/css
        application/x-javascript text/xml application/xml
        application/xml+rss text/javascript;
        server { listen 80; server_name static.example.com;
            proxy_set_header Host $host; proxy_set_header X-Real-IP
            $remote_addr; proxy_set_header X-Forwarded-For
            $proxy_add_x_forwarded_for;
            proxy_pass_header Set-Cookie ;
            location ~*
                    .(?:ico|css|js|gif|jpe?g|png|pdf|zip|tar|t?gz|mp3|wav|swf)$
                    { expires max; add_header Pragma public; add_header
                    Cache-Control public; }
    
            location / { proxy_pass http://localhost:4567; proxy_cache_key
                $cache_key; proxy_cache one; add_header Cache-Control
                public; proxy_cache_valid 1d; proxy_cache_use_stale error
                timeout invalid_header http_500 http_502 http_504
                http_404; }
        }
        server {
            root /var/www/app/deps/current/repo/src/example/static/;
            listen 127.0.0.1:4567; set $cache_key
            $scheme$host$uri$is_args$args;
    
            # Logs access_log
            /var/log/nginx/static.example.com.access.log; error_log
            /var/log/nginx/static.example.com.error.log;
    
            # Root 
            location / {
                alias /var/www/app/deps/current/repo/src/example/static/; 
                } 
           }
    }
    
    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve