​在Nginx中部署Vue项目并添加路径前缀

2024年 2月 19日 125.4k 0

随着前端技术的不断发展,Vue.js作为一种流行的JavaScript框架,被广泛应用于构建现代化的Web应用程序。而在生产环境中,我们通常需要借助Web服务器来部署和提供Vue应用的静态资源。Nginx作为一款高性能的HTTP和反向代理服务器,成为了许多开发者的首选。

一个案例:

一个客户提出希望在部署后的路径上添加一个项目前缀weijishu,原来访问地址是http://192.168.11.12:8888,现希望改成http://192.168.11.12:8888/weijishu才能正常访问,查阅诸多资料,从nginx部署多个前端项目中找到灵感。

server {
  listen       8081;
  server_name  localhost;
  location / { 
    #不修改此处,确保用户直接输入ip+端口无法访问到系统
    root   html;index  index.html index.htm;
  }
  location /weijishu {
    #添加前缀,但html中存放vue的目录名尽量也要改成相同名字
    alias  html/weijishu;
    index  index.html index.htm;
    try_files  $uri  $uri/   /index.html;
  }
}

改好配置后,发现页面一片空白,审查元素,发现资源文件都是404,如下图:

原因是vue打包后的资源文件默认是绝对路径,只有配置在根目录才有效。修改vue打包配置,找到vue.config.js,修改publicPath:'/'   为    ' ./  ' ,修改为相对路径

重新打包,重启nginx,启动成功。

下面详细介绍一下如何在Nginx中部署Vue项目,并为其添加路径前缀。

一、构建Vue项目

首先确保Vue项目已经构建完成。在项目的根目录下,运行以下命令来生成用于生产环境的静态文件:

npm run build

构建完成后,可以在项目的dist目录中看到生成的静态文件。

二、准备Nginx服务器

我们需要一个已经安装并配置好的Nginx服务器。如果你还没有安装Nginx,需要根据你所使用的操作系统进行安装。

三、部署Vue项目到Nginx

将Vue项目构建生成的静态文件复制到Nginx服务器的适当位置。

四、配置Nginx

打开Nginx的配置文件,一般位于/etc/nginx/nginx.conf或/etc/nginx/sites-available/default。

在配置文件中找到server块,然后添加一个新的location块来指定Vue项目的访问路径。例如,如果你想将Vue项目部署在/my-vue-app/路径下,可以添加以下配置:

server {  
    # ... 其他配置 ...  
  
    location /my-vue-app/ {  
        root /path/to/your/vue/dist;  
        try_files $uri $uri/ /my-vue-app/index.html;  
    }  
  
    # ... 其他配置 ...  
}

在上述配置中,root指令指定了Vue项目的静态文件所在的目录,try_files指令告诉Nginx如何寻找和返回文件。当请求的路径不存在时,Nginx会默认返回/my-vue-app/index.html,这对于Vue的单页应用(SPA)是非常重要的,因为它允许Vue Router接管路由。

五、验证并重新加载Nginx

保存并关闭配置文件后,你需要验证Nginx配置的正确性,并重新加载配置以使更改生效。

验证配置:

nginx -t

如果配置验证通过,没有错误,那么重新加载Nginx:

sudo systemctl reload nginx

六、访问你的Vue应用

现在,你可以通过浏览器访问http://your-server-ip/my-vue-app/来查看你的Vue应用了。Nginx将正确地处理路径前缀,并将请求转发到Vue应用的静态资源。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论