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


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


    脚⼿架打包编译配置为:

    1. build: {
    2. // Template for index.html
    3. index: path.resolve(__dirname, '../dist/index.html'),
    4. // Paths
    5. assetsRoot: path.resolve(__dirname, '../dist'),
    6. assetsSubDirectory: 'static',
    7. assetsPublicPath: '/vdp',

    nginx配置为:

    1. location /vdp {
    2. alias /usr/local/app/dev/vdp/vdp-web/dist/;
    3. try_files $uri $uri/ /vdp/index.html;
    4. index index.html index.htm;
    5. }

    /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

  • 相关阅读:
    UNet网络
    python学习笔记:第九章异常
    [linux] 安装WEB服务器(tomcat),环境是32位
    【C++】开源:iceoryx通信中间件配置与使用
    掌握4C原则,设计高效的系统架构
    Java 获取豆瓣电影TOP250
    【JavaScript】巩固JS开发中十个常用功能/案例(11-20)
    【springboot】自动配置原理
    idea maven 打包 内存溢出 报 GC overhead limit exceeded -> [Help 1]
    ansible问题排查
  • 原文地址:https://blog.csdn.net/zhangyun1107892254/article/details/133750970