如何利用map實(shí)現(xiàn)Nginx允許多個(gè)域名跨域
常見(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)單暴力的允許所有訪(fǎng)問(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx/Openresty中啟用http2支持的方法教程
Openresty/Nginx默認(rèn)是不支持http2的,需要將http2模塊編譯進(jìn)應(yīng)用中。這篇文章主要給大家介紹了關(guān)于在Nginx/Openresty中啟用http2支持的方法教程,文中介紹的非常詳細(xì),對(duì)大家具有一的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07
Nginx禁止IP訪(fǎng)問(wèn)只允許域名訪(fǎng)問(wèn)及防盜鏈設(shè)置
我們?cè)谑褂玫臅r(shí)候會(huì)遇到很多的惡意IP攻擊,這個(gè)時(shí)候就要用到Nginx 禁止IP訪(fǎng)問(wèn)了,本文主要介紹了Nginx禁止IP訪(fǎng)問(wèn)只允許域名訪(fǎng)問(wèn)及Nginx防盜鏈設(shè)置,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
使用nginx進(jìn)行負(fù)載均衡的搭建全過(guò)程
負(fù)載均衡用于從“upstream”模塊定義的后端服務(wù)器列表中選取一臺(tái)服務(wù)器接受用戶(hù)的請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于使用nginx進(jìn)行負(fù)載均衡的搭建全過(guò)程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
nginx配置keepalive長(zhǎng)連接的實(shí)現(xiàn)方法
長(zhǎng)連接允許客戶(hù)端在同一個(gè)TCP連接上發(fā)送多個(gè)請(qǐng)求,以減少連接握手的開(kāi)銷(xiāo),提高網(wǎng)站性能,本文主要介紹了nginx配置keepalive長(zhǎng)連接的實(shí)現(xiàn)方法,感興趣的可以了解一下2023-08-08
Nginx 解決504錯(cuò)誤超時(shí)問(wèn)題小結(jié)
本文主要介紹了ginx出現(xiàn)504 Gateway Timeout錯(cuò)誤的原因,通常是因?yàn)槌绦驁?zhí)行時(shí)間過(guò)長(zhǎng)導(dǎo)致響應(yīng)超時(shí),下面就來(lái)介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
詳解Nginx反向代理WebSocket響應(yīng)403的解決辦法
本篇文章主要介紹了詳解Nginx反向代理WebSocket響應(yīng)403的解決辦法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
詳解nginx實(shí)現(xiàn)ssl反向代理實(shí)戰(zhàn)
本篇文章主要介紹了nginx實(shí)現(xiàn)ssl反向代理實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

