现在很多项目都是喜欢前后端分离,网上看了很多感觉心累,写的七七八八,多次尝试后把自己用的展示如下:
if ($http_origin ~* "^http://a.domain.com$") {
set $cors_origin $http_origin;
}
if ($http_origin ~* "^http://b.domain.com$") {
set $cors_origin $http_origin;
}
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers X-Requested-With,aheader, bheader, cheader;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Max-Age 86400;
return 204;
}
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers X-Requested-With,aheader, bheader, cheader;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Max-Age 86400;
注意:
- nginx 不支持循环if
- add_header xxxxx xxxx 内容请放入location内,直接在service下放入if区域中会报错
- b.domain.com a.domain.com 为你自己要开通跨域权限的域名
- aheader, bheader, cheader 这些表示独立需要传递的header头
- 网上 大部分只在 ($request_method = 'OPTIONS') 区域内配置了跨域,这可能会造成浏览器第二次正式请求后拿不到返回体(实测,也不知道什么原因),所以最后正常请求中也加入跨域信息
- 具体add_header参数 自行百度
网友评论