版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjuwwj/article/details/83099496
前言
前后端进行联调时,需要调用后端的接口,然而由于前后端是单独开发的,前端拿不到后端的代码,所以就通过nginx
作了桥梁,进行请求转发。
跨域
跨域,是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制,使得浏览器不能执行其他网站的脚本。
同源
所谓同源是指:域名、协议、端口都相同。
解决跨域问题的方式有很多,比如:
1. jsonp
需要目标服务器配合一个callback函数
2. window.name+iframe
需要目标服务器响应window.name
3. window.location.hash+iframe
同样需要目标服务器作处理
4. html5
的 postMessage+ifrme
这个也是需要目标服务器或者说是目标页面写一个postMessage
,主要侧重于前端通讯
5. CORS
需要服务器设置header :Access-Control-Allow-Origin
6. nginx
反向代理,可以不用目标服务器配合,不过需要你搭建一个中转nginx服务器,用于转发请求
一般当协议、端口不同的时候一般就会采用代理,这里主要讲一下Nginx
代理的方式。
nginx配置
首先找到Nginx配置文件:
- Windows下路径就是你安装的Nginx目录,比如我的放在D盘根目录,那就是:d:\nginx\conf\nginx.conf
- Mac系统配置文件路径在: /usr/local/etc/nginx/nginx.conf, Finder下通过Shift+Command+G,输入/usr/local/etc/nginx/进入该目录
server {
listen 8088;//监听端口8088
server_name 127.0.0.1;
location / {
client_body_buffer_size 128k;
client_max_body_size 2000m;
proxy_connect_timeout 60;
proxy_send_timeout 86400;
proxy_read_timeout 86400;
proxy_pass http://127.0.0.1:8080/;//前端项目启动的端口
proxy_redirect default;
}
location /api {
client_body_buffer_size 128k;
client_max_body_size 2000m;
proxy_connect_timeout 60;
proxy_send_timeout 86400;
proxy_read_timeout 86400;
proxy_redirect off ;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.91.109:9090/api/test;//监听8088端口,请求会被转发到9090
}
}
上面配置的意思是:监听8088端口(Nginx默认启动80端口),将http://127.0.0.1/api
下的所有请求服务转发到http://192.168.91.109:9090/api/test
常用命令
打开安装目录,比如我的放在D盘根目录,那就是:d:\nginx
,会发现有个nginx.exe
文件
start nginx.exe //windows下启动nginx,也可以直接双击nginx.exe,但是这样的话如果修改了配置文件,则没有办法重新加载nginx
nginx.exe -s reload //windows下重启nginx
nginx.exe -s stop //windows下停止nginx