Vite代理
1.前端开发的时候,通常会配置:
server: {
host: '0.0.0.0',
port: 3000,
proxy: {
'/api': {
target: 'http://127.0.0.1:8000',
changeOrigin: true,
},
},
},
开始的时候,我不太理解,为什么需要配置一个target代理,直接发送post(“http://127.0.0.1:8800”)不行吗?
一般情况是不行的,因为跨域了,首先端口就不一样,前端3000,接口8000
但是如果后端配置了Access-Control-Allow-Origin,放行跨域,前端直接请求确实可以解决报错问题。
2.为什么配置了代理,就不存在跨域了?
vite工具自带的DevServer服务(nodejs写的),前端发送的请求发送给同源的DevServer(都是3000端口),再由DevServer转发给后端,前端和DevServer之间不存在跨域问题,DevServer服务和后端之间更不存在跨域问题。
前端(3000)
|
DevServer(3000)
|
后端(8000)
3.生产环境是怎么做的? 生产环境不存在DevServer服务,前后端分离部署的时候,怎么解决跨域的问题呢。 通常使用使用Nginx,浏览器访问的是Nginx的域名(同源),Nginx 再将请求转给后端,原理与Vite代理完全一致。
前端(3000)
|
Nginx(3000)
|
后端(8000)
一个简单的Nginx配置:
server {
listen 80; # Nginx 监听的端口
server_name www.your-site.com; # 你的域名或 IP
# 1. 处理前端静态资源(HTML/CSS/JS)
location / {
root /var/www/frontend/dist; # 前端打包后的文件存放路径
try_files $uri $uri/ /index.html;
}
# 2. 处理后端 API 请求(反向代理核心)
location /api {
proxy_pass http://127.0.0.1:8000; # 转发给本机的后端服务(端口 8000)
# 将请求头中的必要信息传递给后端
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;
}
}