主頁(yè) > 知識(shí)庫(kù) > 如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域

如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域

熱門(mén)標(biāo)簽:百度地圖底圖標(biāo)注 撫州市城區(qū)地圖標(biāo)注 電銷智能機(jī)器人試用 智能電銷機(jī)器人真的有用么 高德地圖標(biāo)注足跡怎么打標(biāo) 企業(yè)辦理400電話收費(fèi)標(biāo)準(zhǔn) 新鄉(xiāng)牧野400電話申請(qǐng) 中國(guó)地圖標(biāo)注上各個(gè)省 激光標(biāo)記地圖標(biāo)注

常見(jiàn)的 Nginx 配置允許跨域

server {
  listen    11111;
  server_name localhost;

  location ~ /xxx/xx {
    if ($request_method = 'OPTIONS') {
      return 204;
    }
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
    proxy_pass http://1.2.3.4:5678;
  }
}

指定 Access-Control-Allow-Origin 為 ‘*' ,即為最簡(jiǎn)單暴力的允許所有訪問(wèn)跨域

允許 Cookie

有些場(chǎng)景下需要使用 Cookie,這時(shí) Nginx 需要加一句 add_header Access-Control-Allow-Credentials 'true';,但此時(shí)會(huì)發(fā)現(xiàn)瀏覽器報(bào)錯(cuò),說(shuō)該參數(shù)為 true 時(shí),allow origin 不能設(shè)置為 ‘*‘,如果手動(dòng)指定了多個(gè)域名,那同樣會(huì)被瀏覽器提示錯(cuò)誤,說(shuō) allow origin 不能設(shè)置多個(gè),這些是協(xié)議層面的限制

使用 map

在 Nginx 中可以使用 map 得到一個(gè)自定義變量,簡(jiǎn)單的使用可以參考官方文檔,在上面提到的場(chǎng)景中,可以對(duì)請(qǐng)求中的 origin 做一個(gè)過(guò)濾處理,把符合要求的請(qǐng)求域名放到一個(gè)變量中,在設(shè)置 allow origin 時(shí)使用該變量就能實(shí)現(xiàn)一個(gè)動(dòng)態(tài)的、多個(gè)的允許跨域域名

一個(gè)示例配置如下:

map $http_origin $allow_origin {
  default "";
  "~^(https?://localhost(:[0-9]+)?)" $1;
  "~^(https?://127.0.0.1(:[0-9]+)?)" $1;
  "~^(https?://172.10(.[\d]+){2}(:[0-9]+)?)" $1;
  "~^(https?://192.168(.[\d]+){2}(:[0-9]+)?)" $1;
}

server {
  listen    11111;
  server_name localhost;

  location ~ /xxx/xx {
    if ($request_method = 'OPTIONS') {
      return 204;
    }
    add_header Access-Control-Allow-Origin $allow_origin;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
    add_header Access-Control-Allow-Credentials 'true';
    proxy_pass http://1.2.3.4:5678;
  }
}

解釋說(shuō)明:

$http_origin 是 Nginx 的內(nèi)部變量,用于獲取請(qǐng)求頭中的 origin

$allow_origin 是可以自定義的變量名

總結(jié)

到此這篇關(guān)于如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域的文章就介紹到這了,更多相關(guān)map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:邯鄲 忻州 南通 西安 臨汾 辛集 延安 海西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域》,本文關(guān)鍵詞  如何,利用,map,實(shí)現(xiàn),Nginx,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章