近期在處理服務(wù)的跨域問題乍恐,參考網(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ù)器上無論如何都不生效笙什,服務(wù)器上的 Nginx 是與其它項(xiàng)目共用的,正常出現(xiàn)跨域的情況下會(huì)發(fā)出一個(gè) OPTIONS 請(qǐng)求胚想,請(qǐng)求通過跨域后再繼續(xù)發(fā)起原始請(qǐng)求琐凭,如果未配置跨域的情況下 OPTIONS 請(qǐng)求會(huì)返回 403,并報(bào)跨域錯(cuò)誤浊服。
在反復(fù)調(diào)整測(cè)試無果的時(shí)候统屈,查到一篇關(guān)于 Nginx 設(shè)置禁用 OPTIONS 請(qǐng)求的文章
if ($request_method ~* OPTIONS) {
return 403;
}
看到這個(gè)文章胚吁,二話不說去 nginx.conf 里查找了下 403,果然發(fā)現(xiàn)了罪魁禍?zhǔn)壮钽荆膊恢滥奈淮蟾缂拥耐蠓觯渲梦募壳暗奈恢弥姓业饺缟厦娴慕?OPTIONS 的代碼,導(dǎo)致一有 OPTIONS 請(qǐng)求進(jìn)來吨掌,直接返回 403半抱,根本沒執(zhí)行到我正常配置了跨域處理的 location 配置,去掉后重啟服務(wù)一切正常膜宋。F***************K代虾,浪費(fèi)了我好幾個(gè)小時(shí)的時(shí)間,以后和別人共用服務(wù)時(shí)候一定要仔細(xì)看好原有配置激蹲,以免再掉坑里