nginx配置vue(history模式)

问题的原因:项目本来使用 hash 的路由模式来部署,因为需求关系,现在要改成 history 的模式来部署了(路径上不要有 # 号)
第一步:
修改项目的 router/index.js 的配置

const router = new VueRouter({
  mode: 'history',  // 将 hash 改成 history
  routes: [
    ...pages
  ]
})

修改 config/index.js assetsPublicPath
nginx配置vue(history模式)_第1张图片

assetsPublicPath: './', // 把 / 改成 ./ 这样访问静态资源的时候使用相对路径,静态资源就不会报 404 了

第二步:
我现在是在本地测试,所以将打包出来的 dist 文件直接放在了 tomcat 的 root 目录下面,先让项目跑起来
nginx配置vue(history模式)_第2张图片
tomcat 的 server.xml
nginx配置vue(history模式)_第3张图片
修改了一下 port 和 host
然后启动 tomcat,在浏览器上面访问
在这里插入图片描述
在这里插入图片描述
可以看到直接访问到 index.html,并且静态资源什么的都正常访问了
但是访问项目的路由 localhost:8098/login 的时候页面直接就 404 了,因为 /login 直接被当作静态资源加载了,打包目录下当然是没有 login 这个文件
第三步:
这个时候就轮到 nginx 配置了
https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90
下面是我的 nginx 配置:

server {
        listen       8096;
        server_name  127.0.0.1;

		location / {
			proxy_pass http://localhost:8098/;
            index index.html;                        
            try_files $uri $uri/ /index.html;
        }
    }

可以看到我配置了一个代理,单访问 127.0.0.1:8096 的时候,会跳转到我的 tomcat 服务下面,try_files $uri $uri/ /index.html; 就是官网上面的配置。
启动 nginx,访问 127.0.0.1:8096
nginx配置vue(history模式)_第4张图片
嗯?
nginx配置vue(history模式)_第5张图片
仔细一看,明明访问的是 js,但是返回的是 index.html?
原因是访问这个 js 的时候 404 导致他被 nginx 转到了 index.html 上面了,所以明明是 js,但是解析的是一段 html,所以报了

Uncaught SyntaxError: Unexpected token '<'

为什么会 404 呢?直到我看到了这个 https://www.cnblogs.com/mmzuo-798/p/10871750.html
nginx配置vue(history模式)_第6张图片
按照文中说法,我的项目是部署在 tomcat,使用 nginx 代理,所以 nginx 的本地资源是找不到我的项目的静态资源的!
于是试着把项目部署在 nginx,并把代理去掉了。
nginx配置vue(history模式)_第7张图片
重启!搞定!
nginx配置vue(history模式)_第8张图片
做一点补充:
有的页面在加载静态资源的时候报了 404
nginx配置vue(history模式)_第9张图片
现在我在 nginx 上面的文件目录结构是这样子的
nginx配置vue(history模式)_第10张图片
很明显少了一层 /xdxt/ 的目录,根据我页面的代码,判断是引入第三方文件的时候出了问题:
nginx配置vue(history模式)_第11张图片
这个时候我们需要改一下我们的配置

server {
    listen       8096;
    server_name  127.0.0.1;
    location /static/mb-view/ {
        root html/xdxt;
        try_files $uri $uri/ /index.html;
    }
    location /xdxt/ {
        index index.html;
        try_files $uri $uri/xdxt/ /xdxt/index.html;
    }
}

结束啦,希望能帮到有需要的小伙伴。

你可能感兴趣的:(vue,nginx,vueRouter,vue,nginx)