nginx 解决跨域

462 阅读1分钟

一:作为代码演示,先假设一个业务场景,前端 ,后端

1,前端使用vue3 +vite
2,后端使用golang的 gin 框架(这里只是演示,作用只是写个很简单的接口)
3,服务器使用的是华为云服务器

1,开发阶段的跨域使用脚手架代理(或者叫node代理啥的,反正你懂的)
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path"
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve:{
    "@":path.join(__dirname,path.resolve("./src"))
  },
  server:{
    proxy:{
      "/api":{
        target:"http://localhost:8081",
        changeOrigin:true,
        rewrite:(path)=>path.replace(/^\/api/,"")
      }
    }
  }
})
// axios 
import axios from "axios";
export default axios.create({
  baseURL:"/api", //api很重要,后面跨域要用
  timeout:10000
})

效果很简陋,

WechatIMG1460.png

开发阶段我数据请求是本地gin起的服务,http://localhost:8081

2,本地golang服务是个很简单的接口

WechatIMG1459.png

二:把前端项目和后端项目都打包,上传到我的华为云服务器,golang打包后的文件demo4使用 nohup demo4 & 命令后台启动运行,dist文件放在nginx安装目录下的html目录,然后修改nginx配置文件,配置8082端口给前端项目

WeChat032c932b976e9bc230c28536e996fb9a.jpg 此时请求8082端口的效果是这样的

WeChatf6eef0ec12d30a1e23fc18a47c62c042.jpg 没有请求到服务端数据,因为8082下并没有/api/news 这个接口,此时,需要让以/api/为开头的请求都转发到 8081 的golang服务上,需要修改nginx 配置文件

WeChat9f021e2a45088bccc8229b5eea526a85.jpg 新增红色框框内的代码,表示匹配到/api/ 字段的请求,把/api 改写为 空字符串,同时把请求转发到proxy_pass 后端跟着到地址,就是golang服务地址

**改完配置文件重新加载nginx -s reload **

WeChat1a242cce48419c3ac5f8cc57a82214a2.jpg 已经能请求到数据,跨域问题解决