Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域
小职 2021-12-06 来源 : 阅读 2027 评论 0

摘要:本篇主要介绍了Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域,希望对于大家Web前端vue开发的学习有一定的帮助。

本篇主要介绍了Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域,希望对于大家Web前端vue开发的学习有一定的帮助。

Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域

1. 前言

本文是为了解决vue反向代理解决跨域及部署服务器nginx端口转发解决跨域,因为踩了不少的坑,百度了很多,也试了太多的方法,最终得以解决,所以记录一下,希望遇到同样问题的友友们可以高效的解决自己项目中遇到的问题。


2.为什么会出现跨域问题

出于浏览器的同源策略限制,同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同协议(protocol)、主机(host)和端口号(port)


3.什么是跨域

当前url请求另一个url时,协议、域名、端口号三者之间任意一个与当前url不同则视为跨域

Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域


4. 非同源策略限制

无法读取非同源网页的Cookie、LocalStorage和IndexDB

无法接触非同源的DOM

无法向非同源地址发送AJAX请求

5. vue+axios请求接口跨域解决方案

vue开发环境下,使用反向代理解决跨域,本人使用的是vue-cli3 所以生成的项目中没有config文件,我们直接可以在项目的根目录上创建vue.config.js配置文件即可,具体实现如下



modules.exports={

devServer:{

proxy:{

'/test':{

target:"//apis.juhe.cn/idioms/query",//后台接口地址(你想要获取数据的接口地址)

changOrigin:true, //允许跨域

pathRewrite:{

'^/test':'', // 请求时会多出来/test这个路径,但是我们不需要,通过重写去掉

// 当我们请求/test地址时,地址会被解析为//apis.juhe.cn/test

// 设置pathRewrite时,地址会被解析为//apis.juhe.cn

}

}

}

}

}


6. 反向代理解决跨域的原理

Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域

化解跨域原理图:

Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域


如果直接去请求只有一个是相同的,肯定跨域

在这里将//localhost:8080的这个域名转换为//apis.juhe.cn,然后再将请求发送到服务器,这样在服务器端到服务器,这样在服务器端收到的请求就是使用//apis.juhe.cn;同理,当服务器返回数据的时候,也是先到代理的中间层,将//apis.juhe.cn转换成//localhost:8080,这样在客户端也是在同源下访问了。


7. 将项目部署到nginx服务器

以上内容解决完成之后,我们将项目部署到nginx服务器,这时候属于生产模式了,同时我们需要在vue项目中的main.js中配置默认访问的ip,设置下面代码之后,我们就可以直接用npm run build打包,发布部署了。


import axios from "axios"

if(process.env.NODE_ENV==="production"){

axios.defaults.baseURL = "你的服务器ip" //生产模式 不同于 开发时

}


8. 部署之后项目这时又出现跨域问题

我们需要修改nginx的配置文件,我的nginx为默认的。服务器用的系统是centos的,nginx.conf文件在这个目录下 /usr/local/nginx/conf/nginx.conf,用vim 修改,具体服务器系统是什么的按照相应操作就可,具体如下:


vim /usr/local/nginx/conf/nginx.conf

1

nginx.conf内容:


server{

listen 80; #监听端口

server_name localhost; #服务器ip地址

    location / { #访问上面服务器ip地址时,出现的项目

            root   html; #根目录为html

            index  index.html index.htm;#默认访问的文件

        }

location /test{ #访问服务器ip/test时,我们实际访问的是下面代理的url

    proxy_pass  //apis.juhe.cn/idioms/query; #代理设置,我们想要请求的真实接口url

}

}


我的项目地址是在//localhost下,我的后台api接口在//apis.juhe.cn/idioms/query?请求参数下,显然如果访问就是跨域。这时候,我们通过监听80端口,设置代理当访问/test时,将转发给我的代理去访问。即实现跨域ngnix端口转发实现跨域请求。


9. 总结

vue反向代理以及部署项目到nginx解决跨域的内容讲到这里了,希望可以帮助到大家,大家如果在项目中遇到类似问题了,可以参考一下,是否和我的问题一样。文章内容,有些是摘自于互联网,整理得来的。不忘大佬们的幸苦成果。如有侵权,联系我删除即可。


✅  扫码免费获取


IT课程·答疑解惑·职业测评

Web前端开发-vue反向代理解决跨域及部署nginx端口转发解决跨域

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程