Nginx配置跨域(CORS)
现在前、后端分离已经是web应用最常见的架构。但由于浏览器的同源策略导致web应用访问不同域的资源不得不面临跨域问题。如下图所示:
简单说下项目的现状:
1、后台(服务端)采用红帽的开源嵌入式web服务器(Undertow)部署;
2、前端,使用VueJS+element ui开发,通过Nginx进行托管;
言归正传。
1、Nginx下载、安装,不懂的自己想办法,<< 传送门 >>
2、打开Nginx根目录,config,找到 nginx.cnf 文件,添加以下配置:
2.1. 前端路由配置
server {
listen 8000;
server_name localhost 127.0.0.1;
location / {
root c:\root\web\app;
index index.html index.htm;
}
}
2.2. 后台接口路由配置
server {
listen 8009;
server_name localhost 127.0.0.1;
location /api {
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
proxy_pass http://127.0.0.1:8010;
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;
proxy_connect_timeout 5;
}
}
特别说明:
(1)/api,是因为接口action key是/api开头,如果你的接口是这样(如:http://example.com/news/search?page=1&size=50),可以设置为 '/',即标识匹配所有请求。
(2)配置跨域的内容在后台路由配置里面,也就是 proxy_pass 以上的内容。
(3)关于端口,8000是前台页面的端口、8009是Vue使用Axios插件配置的服务端API端口,8010是Undertow给后台(服务端)指定的端口。
3、再次测试,已经能够正常返回数据!