解决 nginx部署vue刷新、访问路由页面404

Bug

当使用nginx 部署vue项目的时候 当我们刷新页面的时候,或者访问路由配置页面的时候会直接404,这是因为通常我们做的vue项目属于单页面开发。所以只有index.html。解决这个bug也很简单。只需要将访问重定向到index.html这个页面。交由 index.html 去处理对应的路由跳转就好.

修改nginx配置

配置代码:

    server {
        listen   80; # 监听的端口 
        server_name  xx.xx.xxx.xx; # 处理的host地址 (请替换成你对应的项目访问 ip 或 域名)!!!
        root    /usr/share/nginx/html; # vue项目存在的目录(替换成你对应的地址,如果你这是用docker部署的请改成你容器内的地址)
        location / {
            try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
            index  index.html index.htm;
        }
        #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
        #因此需要rewrite到index.html中,然后交给路由在处理请求资源
        location @router {
            rewrite ^.*$ /index.html last;
        }
   }
  • server_name 请请替换成你对应的项目访问 ip 或 域名
  • server 下的root 替换成你vue项目代码存放的目录,如果使用的是docker跑的nginx请一定写成容器内的地址
    在这里插入图片描述
当你使用Nginx部署Vue.js应用时,有时可能会遇到页面刷新导致空白或者404的问题。这是因为Nginx默认配置下,对于静态文件如HTML、CSS和JavaScript,它会直接发送给浏览器,而不是通过服务器处理。而对于非静态资源,比如Vue路由请求,Nginx需要将请求转发到Node.js应用。 解决这个问题通常需要以下步骤: 1. **配置Nginx**: - 配置`location`块,将所有以`.html`结尾的请求指向你的Vue应用的根目录,例如: ```nginx location / { try_files $uri $uri/ /index.html; } ``` - 对于其他非静态资源,可以设置一个反向代理,将其定向到你的应用程序(假设后端运行在8080端口): ```nginx location /api/ { proxy_pass http://localhost:8080; } ``` 2. **Vue路由模式**: - 确保Vue应用是以hash模式(`#`开头的URL)而非history模式(去掉`#`)。因为history模式需要服务器支持HTML5 History API,而Nginx可能无法自动处理这些改变历史记录的请求。 3. **刷新问题**: - 如果你仍然遇到刷新页面空白,可以在Nginx中启用“如果不存在”缓存控制(`if_not_found`): ```nginx location / { try_files $uri $uri/ /index.html =404; } ``` - 这样当用户访问不存在的路径时,Nginx不会返回404,而是返回index.html,避免了刷新时的空白页。 **相关问题--:** 1. 如何在Nginx中启用gzip压缩来提高性能? 2. Vue.js项目如何设置跨域以让Nginx支持? 3. 如果我想在Nginx中配置HTTPS,应该如何操作?
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值