我有一个在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;
}
}
答案 0 :(得分:1)
通常情况下,您在标头中看到的到期时间会随着每个请求而变化,因为doc says:
“过期”字段中的时间计算为指令中指定的当前时间和时间的总和。
(强调补充。)当前时间是请求的时间。由于当前时间随每个请求而变化,因此到期时间也会改变。如果你想要的是使用上次修改文件的时间而不是expires modified 7d
。
现在,通过将到期日期设置为将来的7天,您告诉浏览器在到期前甚至不打算再次检查。当浏览器在7天内再次检查时,您将获得304。如果您希望浏览器始终检查何时再次尝试加载资源,请设置expires 0
。