在nginx上部署vue项目时该如何配置nginx.conf文件

原创文章
声明:作者声明此文章为原创,未经作者同意,请勿转载,若转载,务必注明本站出处,本平台保留追究侵权法律责任的权利。
全栈老韩
全栈工程师,擅长iOS App开发、前端(vue、react、nuxt、小程序&Taro)开发、Flutter、React Native、后端(midwayjs、golang、express、koa)开发、docker容器、seo优化等。

一、配置nginx环境

选择一:本地安装nginx

可以在本地安装nginx环境进行模拟,windows上可以安装虚拟机环境,Mac由于是类unix系统,可以直接安装nginx,平台上有Mac上原生安装nginx的教程,大家可以参考在Mac上原生玩一把Nginx

选择二:直接使用云服务器

如果购买了云服务器,当然可以在centos类似的系统中进行安装nginx环境,阿里云还有腾讯云上,都可以搜索到对应的安装方法,这里不赘述了。

选择三:使用docker【推荐】

docker这样的容器技术,让环境配置省去了极其多的时间,一键命令构建环境,更是避免了原生安装过程中可能出现的一系列问题。
具体的步骤可以参考本平台上的文章:Mac上操作,使用yml文件制作docker compose nginx

二、端口

对于前端网页项目,往往直接通过80端口进行访问,这样子就可以不用在网页url中包含其他的非80端口号来使用。
(如果一个云服务器上配置多个前端网页项目,都通过80端口访问,当然也是可以的,后面有时间我再出一个文章)

2.1 本地环境

本地的nginx环境下,可以自行定义使用哪个端口来访问前端项目。

2.2 云服务器

需要防火墙放开80端口访问,一般默认开启了,但还是检查一下

2.3 docker环境

参考前面给出的链接文章中的端口绑定,可以自行指定宿主机哪个端口号和容器中的80端口进行绑定。当然宿主机最好也是使用80端口。

三、vue项目处理

3.1 vue项目中的publicPath

一般默认为“/”,表示直接从根域名直接访问,比如:https://www.baidu.com/。

如果是包含路径的访问,比如:https://www.baidu.com/business,那么publicPath应该配置为:"/business"。

如果被设置为空字符串 ('') 或 ('./'),那么所有的产物都会使用相对路径,打出来的包可以被部署在任意路径上。

3.2 打包vue项目

vue项目或者react项目,最终build出来的包,都是js、css、html或者有图片及其他文件的一个文件夹。一般不指定生成目录名的情况下,vue项目的产物文件夹名字为dist。

3.3 产物在nginx中的位置

nginx的根目录,即nginx.conf这个文件所在的目录,这里会有一些文件夹:etc、logs、conf.d、html等,当然可以自己再创建一些文件夹。
本地环境为例

你可以放在你想放的文件夹下,在nginx.conf中指定的路径会以这个根目录为相对路径。

以下图为例:

这里以official项目为例,其中放的就是dist文件夹中的所有内容。那么我们在nginx中会配置一个路径。

四、nginx配置

一个具体简单的配置如下(后面会有官方的写法):

nginx.conf 复制代码
... // 省略以上内容
gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
    charset utf-8;

        #access_log  logs/host.access.log  main;

        location /  {
            root   html/official;
            index  index.html index.htm;
        try_files $uri $uri/ @routers; // 这里比较重要
        }
    location @routers { // 这里是为vue的路由跳转做配置
        rewrite ^.*$ /index.html last;
     }

        #error_page  404              /404.html;
        ... // 省略后面的其他

上面的routers写法,不一定适用于所有人的项目,如果上面大家的配置不可行,可以尝试下面的配置:

nginx.conf 复制代码
server {
    listen       80;
    server_name  localhost;
    location / {
      root   /app;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }

以上。

暂无评论,快来发表第一条评论吧