使用nginx作为反向代理时,缓存静态文件并不起作用

时间:2014-03-22 16:11:56

标签: node.js caching nginx express proxy

我有一个在nginx后面运行的ExpressJS应用程序,我将其设置为反向代理。我还为静态文件设置了一些缓存,如images,js和css。问题是,他们似乎并没有真正的缓存。对这些文件的请求总是返回200状态代码而不是304.如果我检查开发工具中的标头,则Expires标头永远不会与我上次请求文件时相同。它总是被重置为一个新值。我的配置中是否有一些错过的内容?

我使用的是nginx 1.4.4。

感谢。

upstream stats {
  ip_hash;
  server localhost:3000;
}

server {
  server_name app.example.com;

  access_log /var/log/nginx/stats.access.log;
  error_log /var/log/nginx/stats.error.log debug;

  root /srv/www/stats/public;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://stats;
    proxy_redirect off;
  }

  location ~* .(ico|css|js|gif|jpg|png)$ {
    expires 7d;
    log_not_found off;
  }
}

1 个答案:

答案 0 :(得分:1)

通常情况下,您在标头中看到的到期时间会随着每个请求而变化,因为doc says

  

“过期”字段中的时间计算为指令中指定的当前时间和时间的总和。

(强调补充。)当前时间是请求的时间。由于当前时间随每个请求而变化,因此到期时间也会改变。如果你想要的是使用上次修改文件的时间而不是expires modified 7d

现在,通过将到期日期设置为将来的7天,您告诉浏览器在到期前甚至不打算再次检查。当浏览器在7天内再次检查时,您将获得304。如果您希望浏览器始终检查何时再次尝试加载资源,请设置expires 0