根本原因:你的站点是一个单页应用,并使用了 history 路由模式。这种模式下,浏览器的 URL 路径(如 /about)是由前端 JavaScript 动态管理的,服务器上并不存在 about 这个真实的物理文件或目录。当通过点击链接访问时,路由跳转由 JS 拦截处理,一切正常;但当刷新页面时,浏览器会直接向服务器请求 /about 这个路径,Nginx 找不到对应的文件,就返回了 404 错误。
解决方法很简单,只需在 Nginx 配置中添加一行 try_files 指令即可。
解决方案
核心操作是修改你的 Nginx 配置文件,让它在找不到对应文件时,能优雅地“回退”到你的应用入口文件 index.html。
找到配置文件:
通常是 /etc/nginx/conf.d/你的站点配置文件 或 /etc/nginx/sites-available/default。
修改配置:
在 server 块内,找到 location / { ... } 这个代码块,将其中的内容修改或添加为如下所示:
server {
listen 80;
server_name your-domain.com; # 你的域名或IP
root /path/to/your/dist; # 你前端项目打包后的目录(如 dist、build)
index index.html; # 默认入口文件
location / {
# 核心修改:添加这一行 try_files 指令
try_files $uri $uri/ /index.html;
}
}3.保存并测试:
保存配置文件后,在终端执行以下命令来测试配置语法是否正确:
nginx -t
如果显示 syntax is ok,再执行重载命令使配置生效:
nginx -s reload