当前位置:首页 > 技术文章 > 正文内容

Vue3项目没有独立域名靠路径分发的痛苦部署方式

arlanguage5个月前 (12-18)技术文章44

Vue3项目部署注意事项,特别是如果有路径分发,没有独立域名的情况,会遇到各种刷新404页面的问题,那怎么解决呢?

root和alias的区别

nginx配置文件中,指定静态资源路径时,root和alias的区别

路径拼接方式: 使用root时,location块中指定的URI将会直接拼接到root路径后面。而alias则会将location中匹配的部分路径替换为alias指定的路径。
适用场景: root适用于网站的广泛区域,常在server或location块中定义。alias适用于单独改变特定location的路径,适合更细粒度的路径控制。

举个例子

假设我们有个vue项目,因为生产环境没有独立的域名,所以只能用路径来跟别的项目做区分。假设我们分配的路径是/abc。那么我们要怎么部署呢?

1、打包

因为前面是用路径分发,所以最后浏览器访问肯定会带有/abc,比如

localhost/abc

那么里面路由切换也需要是有abc前缀,假设我们的vue项目有如下两个路由

    <RouterLink to="/">Go to Home</RouterLink><br/>
    <RouterLink to="/about">Go to About</RouterLink>

那么,我们的请求应该是

localhost/abc/
localhost/abc/about

如果不带上abc,那么刷新页面因为nginx配置路abc路径才能分发,就会找不到报404.因此打包的时候,必须指定根路径

const router = createRouter({
  //history: createMemoryHistory(),
  //history:createWebHashHistory(),//会带有#
  history:createWebHistory("/abc"),//HTML5 模式 推荐
  routes,
})

这里用的是HTML5模式,也就是没有#的,有机会再尝试其他模式。

另外,因为有前缀,所以静态资源的访问也要用相对路径,所以要修改vite.config.js

export default defineConfig({
  plugins: [vue()],
  base:"./",
})

这样就可以了。

2、alias的配置

alias会将location中匹配的部分路径替换为alias指定的路径,所以配置如下

location /abc {
     alias F:\\Workspace\\html\\cesi;
     try_files $uri $uri/ /abc/index.html;
      index  index.html index.htm; 
 }

这里我们把静态资源文件放到了F:\Workspace\html\cesi目录下,因为用的是alias,所以请求/abc想到于去该目录下找index.html。

try_files $uri $uri/ /abc/index.html;

这个的作用是,如果找不到,就找/abc/index.html。因为我们的vue项目是有路由的,如果不加上这个,路由到/abc/about路径后,刷新页面,F:\Workspace\html\cesi\about
下面是肯定没有index.html就会404.又因为是单页面应用,所以只要找不到我们就去唯一的目录下面找就可以了。

3、root的配置

使用root时,location块中指定的URI将会直接拼接到root路径后面。这种情况下肯定会带有/abc,所以我们直接把静态文件放在abc目录下

location /abc {
     root F:\\Workspace\\html;
     try_files $uri $uri/ /abc/index.html;
      index  index.html index.htm; 
 }

上面是在html下面建立abc目录,所以访问的时候也是可以找到去的,因为是用root,会自动拼上abc,所以下面的root配置不要写上abc

4、proxy转发

假设我们的静态资源是在容器的nginx服务启动的,如果我们想在当前的nginx根据路径分发,那么打包也要指定根路径,但是这里静态资源不能指定相对路径,因为下面的配置静态资源相当于是放在根/下面的。然后启动的配置如下

    server {
        listen       8080;
        server_name  localhost;

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

nginx启动后,访问是正常的,不管访问

http://localhost:8080/abc
http://localhost:8080/abc/
http://localhost:8080/abc/about

此时我们当前的nginx转发配置如下

       location /abc {
                      set $path $1;
                      proxy_pass              http://localhost:8080/;
                      proxy_set_header        Host $host:$server_port;
                      proxy_set_header        X-Real-IP $remote_addr;
                      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
         }

这样就可以了。

http://localhost/abc/

这种情况下不管proxy后面有没有/都没有关系,因为要代理的nginx里面以及处理了,就算没有也可以找到。

5、不用分发路径

那当然最简单啦,也不用搞什么相对路径,根路径。

总结

搞得这么麻烦,都是没有独立域名的锅,二级域名也好啊!

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/281.html

分享给朋友:

“Vue3项目没有独立域名靠路径分发的痛苦部署方式” 的相关文章

Nginx教程

NginxNginx1. 基本概念2. centos7部署nginx1. 部署前准备2. 安装nginx3. 配置文件1. nginx目录结构2. 默认的nginx.conf1. nginx.conf内容结构:2. nginx.conf内容格式说明:3. location 语法详解1. 语法规则:2...

Nginx配置可用参数

Nginx可用参数参数名称注释$arg_NAMEHTTP 请求中某个参数的值,如/index.html?name=zhangsan,可以用$arg_name 取得zhangsan$argsHTTP 请求中的完整参数。例如,在请求/index.html?id=1&name=zhangsan 中,$ar...

Windows下配置Nginx开机自启动

如何安装、配置网站就不说了,文章主要讲讲windows中如何让nginx开机自启动1.windows中配置nginx开机启动需要借助Windows Service Wrapper工具。可以通过地址http://repo.jenkins-ci.org/releases/com/sun/winsw/wi...

Nginx系列:图片过滤处理

http_image_filter_module是Nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高;磁盘有限不想生成多余的图片文件的前提下,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是实时计算的结果,所以网站...

提升网站性能开发的10个技巧 提升网站性能开发的10个技巧是什么

随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键。高度联结的世界意味着用户对网络体验提出了更严苛的要求。假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情你的竞争对手。以下为大家总结10条有关性能提升的经验,以供参考:1. 采用反向代理服务器(Rever...

一文教会你如何使用 iLogtail SPL 处理日志

作者:阿柄随着流式处理的发展,出现了越来越多的工具和语言,使得数据处理变得更加高效、灵活和易用。在此背景下,SLS 推出了 SPL(SLS Processing Language) 语法,以此统一查询、端上处理、数据加工等的语法,保证了数据处理的灵活性。iLogtail 作为日志、时序数据采集器,在...