您的位置:首页 > 运维架构 > Nginx

nginx配置允许指定域名下所有二级域名跨域请求

2017-11-16 21:07 1081 查看
核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头。

#畅游www
server {
listen 8015;
server_name test-tl.changyou.com;
root E:/work/site/www ;
location ~* \.(eot|ttf|woff|svg|otf)$ {
set $flag '0';
if ( $http_origin ~* ^(http?:\/\/.*\.changyou\.com:8014$) ){
set $flag '1';
}
if ( $http_origin ~* ^(http?:\/\/.*\.cy\.com:8014$) ){
set $flag '1';
}
if ($flag = '1') {
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST';

}
}
}


匹配文件类型: eot|ttf|woff|svg|otf

为这几种文件类型设置跨域访问

$http_origin 为nginx全局变量,即域名

$http_origin ~* ^(http?:\/\/.*\.changyou\.com:8014$)

匹配所有changyou.com:8014端口下面的二级域名

由于nginx无法使用or语法,所以判断 匹配所有cy.com:8014端口下面的二级域名

用变量赋值的方法实现了

set $flag '0';
if ( $http_origin ~* ^(http?:\/\/.*\.changyou\.com:8014$) ){
set $flag '1';
}
if ( $http_origin ~* ^(http?:\/\/.*\.cy\.com:8014$) ){
set $flag '1';
}


如果默认是80端口,就把:8014去掉就行。

其实核心代码就是:

add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Methods' 'GET,POST';


(1)Access-Control-Allow-Origin

该字段是必须的。它的值要么是请求时
Origin
字段的值,要么是一个
*
,表示接受任意域名的请求。

(2)Access-Control-Request-Method

该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法

(3)Access-Control-Allow-Credentials

该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为
true
,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为
true
,如果服务器不要浏览器发送Cookie,删除该字段即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: