核心原理是根據請求域名匹配是否是某域名的二級域名判斷是否添加允許跨越頭。
#暢游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,刪除該字段即可。