# 跨域
# 什么是跨域
跨域是指去向一个为非本origin(协议、域名、端口任意一个不同)的目标地址发送请求的过程,这样之所以会产生问题是因为浏览器的同源策略限制
# 怎么判断跨域
同源 : 协议名、ip地址、端口号 三者一致就叫同源
当前页面地址 : http://127.0.0.1:3000/home/index.html
请求地址1 : https://127.0.0.1:3000/abc [跨域(不同源),协议不同]
请求地址2 : http://127.0.0.1:3000/abc [同源, 三码合一]
请求地址3 : http://192.168.48.81:3000/abc [跨域(不同源), ip不同]
请求地址4 : http://127.0.0.1:4399/abc [跨域(不同源),端口号不同]
1
2
3
4
5
6
7
2
3
4
5
6
7
# 怎么解决跨域
解决跨域的方式有多种1.jsonp,2.CORS,3.nginx代理(这是今天咋们的重点)
# nginx代理
前后端分离后,后端形成了多服务,多模块架构,由于浏览器同源策略,就导致了不同服务间跨域的情况出现。
nginx代理就是通过特定标识,在nginx配置中心统一识别转发到不同资源地址
# nginx代理前端配置
vue.config.js配置
// 服务器地址
const target = 'http://192.178.2.250:8181/'
// 文件服务地址
const fileViewTarget = 'http://192.178.2.250:8181/file-view/'
module.exports = {
devServer: {
proxy: {
'/api': {
target: target,
pathRewrite: { '^/api': '' }
},
'/file-view': {
target: fileViewTarget,
pathRewrite: { '^/file-view': '' }
},
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
环境变量中配置
// 基础平台
VUE_APP_SYSTEM_API=/api
1
2
2
然后将变量加入接口中
# nginx配置中心配置
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# 监听域名中带有group的,交给FastDFS模块处理
location /api {
proxy_pass http://192.178.2.250:13100;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/api/(.*) /$1 break;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /file-view {
proxy_pass http://192.178.2.250:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/file-view/(.*) /$1 break;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32