前言

​ 本篇文章主要记录个人在公司项目开发中所遇问题,主要内容:在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,出现了跨域问题的保错。

如果文章有歧义,请各位大佬指出,避免误导更多的人!!

正文

Bug起因

​ 在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,在设置背景图片时出现了跨域问题的保错。
在这里插入图片描述

Vue项目解决跨域问题

1. 可以通过 vue.config.js 中的 devServer.proxy 选项来配置请求代理。(vue打包部署时代理失效)

devServer: {
    // development server port 8000
    port: 8000,
    // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
    proxy: {
      '/api': {
        target: 'http://1xx.1xx.1.xx:8080/api',
        ws: false,
        changeOrigin: true,
        pathRewrite: { '^/api': '' }
      },
      // 解决图片跨域问题(api请求时注意使用/upload开头)
      '/upload': { // 前端项目要被代理的路径
        target: 'http://1xx.1xx.1.xx:8083', // 真正的图片路径
        changeOrigin: true, //表示是否改变原域名
        ws: true, //表示WebSocket协议
        pathRewirte: {
          // 这里是追加链接,比如真实接口/请求路径里包含了 /upload,就需要这样配置.
          '^/upload': ''
        }
      }
    }
  }

​ 很明显 devServer的配置主要针对vue项目本地开发环境时的跨域代理配置;当vue前端项目打包部署后,会成为单独的静态资源,前端框架中所配置服务器跨域代理将不起作用;资源要被访问,那必然还是需要有另一个 web 服务器来装载它,这个服务器常见的就是nginx。

2.nginx服务器反向代理来解决vue项目打包后的跨域问题。

​ 找到vue前端打包后所部署的nginx服务其下的配置文件nginx.conf。

​ 如下代码:使用当前服务器的其他端口路径代理8080端口下的(/api 和 /upload)

server {
        listen       8080;
        server_name  localhost;
        root   /usr/local/nginx/html/dist;
        index  index.html index.html;
        
        location /{
            root   /usr/local/nginx/html/dist;
            try_files $uri $uri/ /index.html;
            index  index.html index.html;
        }
    	## 配置反向代理,解决跨域问题 
        location /api/ {
            proxy_pass http://127.0.0.1:8081; ## 真实的后端接口路径
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 5;
        }
        location /upload/ {
            proxy_pass http://127.0.0.1:8083; ## 真实的图片请求路径
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 5;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 }
Logo

前往低代码交流专区

更多推荐