React应用Git Pull后Web服务器未更新问题求助
解决React应用部署后Nginx不更新内容的问题
我之前也碰到过一模一样的问题!折腾了好一会儿才搞定,给你列几个最可能的排查方向和解决办法:
1. 先搞定浏览器缓存这个最常见的坑
很多时候不是服务器没更新,是浏览器死死抱着旧缓存不肯放:
- 强制刷新页面:按
Ctrl + Shift + R(Windows/Linux)或Cmd + Shift + R(Mac),直接跳过本地缓存加载最新内容。 - 更稳妥的测试方式:打开浏览器开发者工具(F12),切换到Network选项卡,勾选「Disable cache」,再刷新页面看效果。
2. 检查Nginx的静态资源缓存配置
如果浏览器缓存清理后还是没变化,大概率是Nginx端给静态资源加了强缓存。去你的站点配置文件(一般在/etc/nginx/sites-available/目录下)看看有没有类似这样的配置:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 1y; add_header Cache-Control "public, immutable"; }
这种配置会让浏览器把静态资源缓存一年,哪怕服务器更新了也不会主动请求新文件。解决办法:
- 先临时注释掉这些缓存配置,然后重启Nginx:
sudo systemctl restart nginx - 长期方案:放心用Create React App默认的哈希文件名机制(build后的文件会带一串唯一哈希,比如
main.abc123.js),更新后文件名自动变化,Nginx和浏览器就会加载新文件,不用再纠结缓存问题。
3. 确认React项目的build目录真的更新了
别笑,我真的犯过这个错——git pull后忘记重新build,或者build的路径不对:
- 进入你的React项目根目录,重新执行打包命令:
npm run build(用yarn的话就是yarn build) - 检查Nginx配置里的
root字段是不是指向了正确的build目录,比如:
server { root /var/www/your-react-app/build; # 这里必须是打包后的build文件夹路径 index index.html; # ...其他配置 }
如果root路径写错了,哪怕你build了一百次,Nginx还是在加载旧目录的内容。
4. 确保Nginx真的重启成功了
有时候sudo service nginx restart可能没生效,试试更可靠的命令:
- 重启Nginx:
sudo systemctl restart nginx - 重启后检查状态:
sudo systemctl status nginx,确保输出里显示「active (running)」,没有报错。
5. 清理Nginx自身的缓存(如果开启了)
如果你的Nginx配置了proxy_cache这类服务器端缓存,需要手动清理缓存目录:
sudo rm -rf /var/cache/nginx/* sudo systemctl restart nginx
6. 检查文件权限
git pull后新生成的文件可能权限不对,导致Nginx无法读取:
- 给项目目录设置正确的用户组权限:
sudo chown -R www-data:www-data /var/www/your-react-app - 确保build目录下的文件是可读的:
sudo chmod -R 755 /var/www/your-react-app/build
按这个顺序排查,基本能解决90%的问题。我当时就是因为Nginx配了强缓存,加上自己没强制刷新浏览器,折腾了半天😂
内容的提问来源于stack exchange,提问作者meerkat




