近期在處理服務(wù)的跨域問(wèn)題,參考網(wǎng)上的文章,使用了如下配置
location /api {
if ($request_method = 'OPTIONS') {
return 204;
}
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
# 本地需要轉(zhuǎn)發(fā)的服務(wù)
proxy_pass http://localhost:5566/;
}
該配置在本地測(cè)試可以解決跨域問(wèn)題,放到服務(wù)器上無(wú)論如何都不生效,服務(wù)器上的 Nginx 是與其它項(xiàng)目共用的,正常出現(xiàn)跨域的情況下會(huì)發(fā)出一個(gè) OPTIONS 請(qǐng)求,請(qǐng)求通過(guò)跨域后再繼續(xù)發(fā)起原始請(qǐng)求,如果未配置跨域的情況下 OPTIONS 請(qǐng)求會(huì)返回 403,并報(bào)跨域錯(cuò)誤。
在反復(fù)調(diào)整測(cè)試無(wú)果的時(shí)候,查到一篇關(guān)于 Nginx 設(shè)置禁用 OPTIONS 請(qǐng)求的文章
if ($request_method ~* OPTIONS) {
return 403;
}
看到這個(gè)文章,二話不說(shuō)去 nginx.conf 里查找了下 403,果然發(fā)現(xiàn)了罪魁禍?zhǔn)?,也不知道哪位大哥加的,配置文件靠前的位置中找到如上面的禁?OPTIONS 的代碼,導(dǎo)致一有 OPTIONS 請(qǐng)求進(jìn)來(lái),直接返回 403,根本沒(méi)執(zhí)行到我正常配置了跨域處理的 location 配置,去掉后重啟服務(wù)一切正常。F***************K,浪費(fèi)了我好幾個(gè)小時(shí)的時(shí)間,以后和別人共用服務(wù)時(shí)候一定要仔細(xì)看好原有配置,以免再掉坑里