Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前端build之后如何部署到nginx二级目录中,API 路径怎么修改? #725

Closed
smjkzsl opened this issue Mar 20, 2023 · 4 comments

Comments

@smjkzsl
Copy link

smjkzsl commented Mar 20, 2023

VITE_GLOB_API_URL=/api #这个修改 好像并不起作用

VITE_APP_API_BASE_URL=http://localhost:3002/

@swuecho
Copy link

swuecho commented Mar 21, 2023

以上两个参数是关于, 后端请求的路径, 跟前端无关.

https://vitejs.dev/guide/build.html#public-base-path

chatgpt 答案

可以在 vite.config.js 中配置 base 字段来改变构建后的 base url。

假设要将构建后的应用部署在 http://www.example.com/my-app/ 目录下,则需要在 vite.config.js 中添加如下配置:

export default {
  // ...
  base: '/my-app/'
}

这样,在 npm run build 构建后生成的静态文件中,html 即会被注入为:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vite App</title>
    <link rel="icon" type="image/svg+xml" href="/my-app/favicon.svg" />
    <link rel="stylesheet" href="/my-app/assets/css/app.abc123.css" />
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/my-app/assets/js/app.abc123.js"></script>
  </body>
</html>

注意,base 字段配置的是相对于域名的路径,不需要加上 http://www.example.com。同时,在使用 vite dev 命令启动开发服务器时,也需要注意 base 字段的配置,否则会影响开发时路由的跳转。

export default {
  // ...
  base: '/my-app/',
  server: {
    // dev server 配置中要相同
    port: 8080,
    base: '/my-app/'
  }
}

这样,在启动开发服务器时,应用即会在 http://localhost:8080/my-app/ 访问。如果有使用路由,则可以在路由配置中添加 base 字段。

import { createRouter, createWebHistory } from 'vue-router';

const router = createRouter({
  history: createWebHistory('/my-app/'), // 添加 base 配置
  routes: [
    {
      path: '/',
      component: () => import('./views/Home.vue')
    },
    {
      path: '/about',
      component: () => import('./views/About.vue')
    }
  ]
});

这样,在使用路由导航时,即可正确地跳转到对应路径。

@starmoon-1134
Copy link

starmoon-1134 commented Mar 27, 2023

按照你的提示,已经可以通过localhost:1002/my-app/ 的方式访问了,但是通过nginx反代之后就404了,nginx这么配置有问题吗(本人小白)

  location /my-app/ {   #chagpt路径
      proxy_redirect off;
      proxy_pass http://127.0.0.1:1002;  #chagpt监听端口
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;        

}

@starmoon-1134
Copy link

starmoon-1134 commented Mar 27, 2023

前端代理成功了,浏览器请求的时候,路径末尾少了/ 导致请求失败。也可以把vite.config.ts中base路径末尾的/去掉,即

export default {
  // ...
  base: '/my-app',
  server: {
    // dev server 配置中要相同
    port: 8080,
    base: '/my-app'
  }
}

修改前端环境变量 .env
VITE_GLOB_API_URL=/my-app-backend/api
然后后端就404了,通过nginx替换路径解决,不知道是否还有更优雅的方式呢?

location /my-app-backend {
          rewrite ^/my-app-backend/(.*)$ /$1 break;
          proxy_set_header   X-Real-IP $remote_addr; #转发用户IP
	  proxy_pass http://127.0.0.1:3002;
}

@wongdean
Copy link

修改成功了,写一下我的配置:

        location = /chat/ {
            alias   /var/www/html/wordpress/chat/;
            index  index.html index.htm;
        }
        location /api {
            proxy_set_header   X-Real-IP $remote_addr; #转发用户IP
            proxy_pass http://127.0.0.1:3002;
        }

然后,需要前端打包修改一个文件vite.config.ts,加一行(我加在了34行)

    base: '/chat/',

这样可以通过 域名/chat 访问到了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants