git提交后,Nginx服务器旧的静态文件

我使用Nginx来提供静态文件(同时也用作我的NodeJS express RestAPI的反向代理)。 问题是当我推送一个新的git提交到服务器,用户仍然会得到旧的(最新版本)文件。 目前的解决方法是用户在浏览器中清除caching

这可能是什么原因? 我猜这是一些服务器端cachingconfiguration错误? 看下面我的nginxconfiguration(基本+包括)。

如下所示,静态文件(.html,.js,.css)驻留在/ var / www / frontend

## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; listen 80; server_name **REMOVED_FOR_PRIVACY_REASONS**; proxy_cache_valid 404 1m; location / { root /var/www/frontend; index index.html try_files try_files $uri $uri/ =404; #proxy_cache backcache; #proxy_cache_bypass $http_cache_control; #add_header X-Proxy-Cache $upstream_cache_status; } location /api/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } 

我也认为这与客户端caching有关。

我会开始用萤火虫或类似的东西来debugging这个,加载页面并检查caching头(etag / last-modified / cache-control / expires)。

虽然我们在这,我发现真的很好这个关于HTTPcaching的文档:

https://www.mnot.net/cache_docs/

尽pipe如此,仍然是一个制定HTTP标准的人。

我认为这不是服务器端caching错误configuration。 静态文件由浏览器自动caching。 您需要某种静态文件版本来强制浏览器读取您修改的源代码:

 <link src="/static/style.css?v=xxxx"> <script language="javascript" type="text/javascript" src="/js/app.js?v=xxxx"></script> 

除了其他的答案之外,看一下hashbuster ,一个用python编写的工具来克服这样的问题。 这个描述是这样写的:“hashbuster是一个在HTML文件中为URL添加caching查询string的工具。

如果您对网站进行大量更改,浏览器和代理caching可能是您存在的祸根。 如果你曾经不得不告诉客户清除浏览器caching以查看最新的代码推送,那么hashbuster适合你。

你可以调用这个工具,例如通过服务器上的git post-receive hook 。