1. 问题描述

在工作的时候,往往碰到同一套vue前端代码程序需要部署到很多的服务器上,每次更改完程序都需要打包部署到各个服务器上,因为每个服务器的访问地址和端口都不一样,如果用的若依自带的框架,需要每次都需要打包好多个包,一个端口打一个,要是需要部署在10000个服务器,那么每天啥也不用干,写程序1小时,打包得两三天,要命了就,哈哈哈
解决这个问题的唯一途径就是打一次包,部署到不同的服务器上就可以,这样就省下很多打包的时间了。
这个问题解决完后,又出来了新的问题,websocket无法使用了,然后又要解决websocket的问题;还碰到了nginx配置的问题。

2. 若依自带的配置

2.1. vue.config.js中的配置

在这里插入图片描述

2.2. .env.production中的配置

在这里插入图片描述

2.3. 使用场景

在这里插入图片描述

3. 解决思路

3.1. 解决多次打包的思路和方案

将.env.production中的VUE_APP_BASE_API中的ip地址去掉,仅保留 / 和nodiot,具体保留的内容根据各自做的项目来定,主要是一个前缀,需要区别于其他的。
比如要访问一个接口,后台提供的接口地址为:http://192.172.0.59:9000/test/query,前端访问的时候是不能直接访问这个地址,因为会存在跨域,所以要做代理,上面写的若依中vue自带的配置.env.production中的VUE_APP_BASE_API可以配置成http://192.172.0.59:9000/test/,具体的配置如下图所示:
在这里插入图片描述
在这里插入图片描述
请求的接口,可以直接写“/query”。

vue.config.js配置中的target是目标地址,就是访问后端的实际的地址,.env.production中的VUE_APP_BASE_API是设置代理的地址,访问的时候找到匹配到的VUE_APP_BASE_API,然后将VUE_APP_BASE_API替换成target中的地址。

所以,解决多次打包的问题,只需要将VUE_APP_BASE_API中的ip和端口去掉就可以,其他地方不需要做任何的变化。
对应的,在nginx中配置的时候,也需要做更改,更改截图如下:

在这里插入图片描述

3.2. 解决websocket无法使用的问题

没有更改代理前的时候websocket的配置如下图所示:
在这里插入图片描述
更改后,因为process.env.VUE_APP_BASE_API中没有ip和端口了,而且还获取不到真实的转发地址,导致无法连接,所以就没法正常的连接websocket了,因为现在也不能再将后台的访问地址写死,所以这个问题就出现了。

3.2.1. 思路1(错误的)

一开始想到了一种解决方案,就是通过浏览器获取本地访问的ip,这样也可以实现,但是还是有问题,也是不能正常的连接。
在这里插入图片描述

3.2.2. 思路2(正确的)

后来又增加了一个webScoket的代理,通过代理的方式去实现,具体的思路如下:
(1)在vue.config.js中增加webScoket的代理,截图如下:
在这里插入图片描述
(2)在写webScoket的方法中更改

其中/wsProxy是代理的方法名,执行的时候能将/wsProxy替换成“http://192.172.0.59:9000/test”,wsProxy可以根据个人喜欢设置,只需要跟vue.config.js的名称保持一致就可以。

在这里插入图片描述

4、nginx的配置

4.1. windows环境的配置

server {

        #开启gzip
        gzip  on;  
        #低于1kb的资源不压缩 
        gzip_min_length 1k;
        #压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 
        gzip_comp_level 5; 
        #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
        gzip_types application/json text/plain application/javascript application/x-javascript text/javascript text/xml text/css;  
        #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
        gzip_disable "MSIE [1-6]\.";  
        #是否添加“Vary: Accept-Encoding”响应头
        gzip_vary on;


        listen       8081;
        server_name  localhost;
   location / {
      root   html;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
    }
        #反向代理
    location ^~ /test {
        proxy_pass http://192.172.0.59:9000/test;
    }
    #websocket
    location ^~ /wsProxy {
       proxy_pass http://192.172.0.59:9000/test;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

4.2. linux环境的配置

server{
    listen 10014;
    server_name localhost;
    index index.html index.htm;
    root /nodiot/nginx/html/liaocheng;
    
    location / {
      root   html/liaocheng;
      index  index.html index.htm;
      try_files $uri $uri/ /index.html;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
      expires 30d;
      # access_log off;
    }
    location ~ .*\.(js|css)?$ {
      expires 15d;
      #access_log off;
    }
    #反向代理
    location ^~ /test {
        proxy_pass http://192.172.0.59:9000/test;
    }
    #websocket
    location ^~ /wsProxy {
       proxy_pass 192.172.0.59:9000/test;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }

    access_log off;
  }
Logo

快速构建 Web 应用程序

更多推荐