当前位置: 代码网 > 服务器>服务器>Linux > Nginx前端页面刷新后出现404的原因与解决方案

Nginx前端页面刷新后出现404的原因与解决方案

2025年03月19日 Linux 我要评论
最近,我负责上线一个新的前端平台,部署在 nginx 上。最初访问时一切正常,但当我 刷新页面 时,却突然出现了 404 not found。这让我意识到,可能是 nginx 的静态资源路径 出了问题

最近,我负责上线一个新的前端平台,部署在 nginx 上。最初访问时一切正常,但当我 刷新页面 时,却突然出现了 404 not found。这让我意识到,可能是 nginx 的静态资源路径 出了问题。于是,我深入排查了这个 404 问题,并整理成这篇博文,希望能帮助遇到类似情况的朋友。

静态资源路径问题(单页应用 spa)

如果 nginx 用于托管 vue、react、angular 等前端单页面应用(spa),刷新后 404 可能是因为 nginx 直接查找 url 对应的物理路径,而前端路由交由 javascript 处理。

解决方案:使用 try_files

修改 nginx.conf,确保 location / 配置如下:

location / {
    root /var/www/html;
    index index.html;
    try_files $uri /index.html;
}

解释:

  • try_files $uri /index.html;:如果找不到请求的文件,则返回 index.html,前端路由框架再解析路径。
  • 适用于 vue router、react router 这类 前端路由模式为 history 的情况。

nginx 资源路径 (root 或 alias) 配置错误

如果 root 或 alias 路径错误,nginx 找不到资源文件,导致刷新时返回 404。

示例:正确的 root配置

server {
    listen 80;
    server_name example.com;

    root /var/www/html;
    index index.html;
    
    location / {
        try_files $uri $uri/ /index.html;
    }
}

错误示例(容易导致 404):

location / {
    alias /var/www/html/;
    index index.html;
}

alias 不能直接用于目录,应使用 root。

浏览器缓存或 nginx 缓存影响

如果修改了 nginx 配置,但仍然 404,可能是缓存问题。

清除浏览器缓存

按 ctrl + shift + r 或在开发者工具(f12)中 禁用缓存 后尝试刷新。

给静态资源加版本号

在 index.html 中修改引用的 js/css:

<script src="/js/app.js?v=1.0.1"></script>

这样可避免缓存问题。

nginx 关闭缓存

如果静态资源仍然被缓存,可在 nginx.conf 添加:

location / {
    add_header cache-control "no-cache, no-store, must-revalidate";
}

然后重启 nginx:

systemctl restart nginx

反向代理 (proxy_pass) 配置错误

如果 nginx 代理了后端 api(如 node.js、python flask),刷新后 404 可能是因为请求路径未正确转发。

示例:正确的反向代理

location /api/ {
    proxy_pass http://backend_server:8080/;
    proxy_set_header host $host;
    proxy_set_header x-real-ip $remote_addr;
}

检查点:

确保 backend_server:8080 服务可用。

proxy_pass 后必须带 /,否则会拼接路径导致 404。

错误示例(容易导致 404):

location /api {
    proxy_pass http://backend_server:8080;
}

这里 /api 缺少 /,会导致 http://backend_server:8080api/... 这样的错误路径。

nginx 日志分析

如果以上方法仍未解决问题,可以查看 nginx 访问日志 和 错误日志 进行分析:

# 查看访问日志
tail -f /var/log/nginx/access.log

# 查看错误日志
tail -f /var/log/nginx/error.log

如果错误日志中出现类似:

[error] 404 no such file or directory

说明请求的资源路径错误,可能需要检查 root 或 try_files 配置。

nginx 配置变更后未重启

如果修改了 nginx.conf 但未生效,可能是 nginx 未重新加载配置。

解决方案

nginx -t   # 先测试配置是否正确
systemctl restart nginx  # 重启 nginx

总结

问题解决方案
前端 spa 应用(vue/react)刷新 404try_files $uri /index.html;
nginx root 或 alias 路径错误确保 root 指向正确的静态文件目录
浏览器缓存问题清除缓存、添加版本号、禁用 nginx 缓存
反向代理 proxy_pass 404确保 proxy_pass 语法正确,后端服务可用
nginx 配置修改未生效nginx -t 检查语法,systemctl restart nginx 重启

按照本文方法排查,相信可以快速找到 nginx 刷新后 404 的真正原因,并顺利解决问题!

到此这篇关于nginx前端页面刷新后出现404的原因与解决方案的文章就介绍到这了,更多相关nginx页面刷新404内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • Linux书签上下移动方式

    Linux书签上下移动方式

    linux书签上下移动步骤读书签文件,分割到qstringlist,点击右键菜单获取序号,交换序号,写书签文件。qstringlist.swap(int, in... [阅读全文]
  • Linux深入理解进程和文件及内存管理问题

    Linux深入理解进程和文件及内存管理问题

    一、重谈linux下一切皆文件我们说了一切皆文件,对于操作系统来说,磁盘键盘显示屏等等一系列的外设都是文件。举一个访问外设的例子:进程运行,从进程pcb中找到指... [阅读全文]
  • Linux中的日志插件详解

    一、日志文件的重要性故障排查与问题定位快速发现问题:日志能够实时记录系统运行过程中的各种事件和状态信息,当系统出现故障或异常时,通过查看日志可以快速察觉到问题的发生,例如,服务器突…

    2025年03月20日 服务器
  • Linux systemV消息队列和信号量详解

    Linux systemV消息队列和信号量详解

    一、消息队列1、实现原理操作系统在内核建立一个队列,通信的两个进程ab以数据块的形式将需要发送的数据pushback到队列中,数据块是一个结构体,其中有字段标识... [阅读全文]
  • Linux中的进程间通信之匿名管道解读

    一、基本概念我们知道多个进程之间是互相独立的,但是有时候我们需要将一个进程的数据传递到另一个进程,实现数据传输的效果,有的时候多个进程之间要共享同样的资源,有的时候一个进程要对其他…

    2025年03月20日 服务器
  • Linux中的缓冲区和文件系统详解

    一、file结构1、fdfile是在c中封装起来的一个结构体,那我们访问文件的时候都是通过fd访问的,自然在file中是封装了fd的,file结构体中,int _file存放的就是…

    2025年03月20日 服务器

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com