Nginx部署history路由模式的vue项⽬

问题 :Nginx通过location配置多个前端项⽬,如果前端使⽤了history路由,多级⽬录状态下刷新⻚⾯,nginx会报404或者500

前端框架使⽤的是: vue-cli

脚⼿架打包编译配置为:

javascript 复制代码
build: {
// Template for index.html
index: path.resolve(__dirname, '../dist/index.html'),
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: '/vdp',

nginx配置为:

java 复制代码
location /vdp {
alias /usr/local/app/dev/vdp/vdp-web/dist/;
try_files $uri $uri/ /vdp/index.html;
index index.html index.htm;
}

/vdp 是 location 的匹配规则;

alias 指定了 location 匹配到的请求所对应的⽂件路径。

下⾯这个配置才是关键:

官⽹对try_files的解释 https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

try_files 处理在当前上下⽂中执⾏。⽂件的路径是 file根据 root和alias指令从参数构造的。

可以通过在名称末尾指定斜杠来检查⽬录是否存在,例如 $uri/ 。如果未找到任何⽂件, uri 则会进⾏内部重定向到最后⼀个参数中指定的⽂件。

这⾥的配置是为了⽀持 vue 的 history 路由模式,即在浏览器中输⼊URL时,不会向服务器发送请求,⽽是直接在浏览器中显示对应的⻚⾯。因此,这⾥需要将所有请求都重定向到 /vdp/index.html ,以便 vue-router 能够正确地处理路由,此处的 /vdp/index.html 是当前上下⽂中的路径;

总结:我理解的是当⽤户输⼊ www.xxx.com/vdp/home 的时候,浏览器⾸先请求nginx服务器资源,当匹配到 /vdp/ 的时候,服务器返回了 alias ⾥⾯的资源,并在浏览器端创建了

vdp ⽬录,将请求的资源放置于该⽬录下;当继续匹配到 /vdp/home 的时候,由于浏览器不

会向服务器请求资源,所以最后会加载 try_files 中设置的 vdp ⽬录下的 index.htm

相关推荐
我是koten15 小时前
【运维杂谈】K8s遇到Terminating的名称空间删除不了怎么办?(解决方案亲测有效)
linux·运维·服务器·云原生·kubernetes·k8s·名称空间
Csvn20 小时前
安装、升级与目录结构
后端·nginx
修己xj1 天前
服务器无法解析域名?一次 DNS 配置缺失的排查与修复
运维
xbzb1 天前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
软件技术NINI1 天前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avio_open调用流程与实战(三十八)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
瑞克-桑切斯1 天前
ERP 企业生产管理系统部署手册
运维·docker·云原生·容器·eureka
招风的黑耳1 天前
SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)
vue.js·spring boot·mysql
江屿风1 天前
【Git-组件】【Git入门:从文档灾难到版本掌控】流食般投喂
运维·笔记·git·组件·版本控制
我不会起名字3221 天前
K8s 节点磁盘打满导致 Pod 被驱逐:4 类占用与回收顺序
运维·kubernetes·k8s·diskpressure·evicted