nginx 配置跨域失效修復(fù)的方法示例
nginx 配置跨域不生效 如下配置
server { listen 80; server_name localhost; # 接口轉(zhuǎn)發(fā) location /api/ { # 允許請求地址跨域 * 做為通配符 add_header 'Access-Control-Allow-Origin' '*'; # 設(shè)置請求方法跨域 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; # 設(shè)置是否允許 cookie 傳輸 add_header 'Access-Control-Allow-Credentials' 'true'; # 設(shè)置請求頭 這里為什么不設(shè)置通配符 * 因為不支持 add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token'; # 設(shè)置反向代理 proxy_pass 127.0.0.1:8081/; } }
網(wǎng)上的 nginx 跨域配置主要是以上版本,然而很多都是抄一抄,并沒有真的去實踐,故寫了下文章提醒下有需要的人,不要盲目抄,學(xué)會分析。
nginx 修改如下配置后生效
server { listen 80; server_name localhost; # 接口轉(zhuǎn)發(fā) location /api/ { # 允許請求地址跨域 * 做為通配符 add_header 'Access-Control-Allow-Origin' '*'; # 設(shè)置請求方法跨域 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; # 設(shè)置是否允許 cookie 傳輸 add_header 'Access-Control-Allow-Credentials' 'true'; # 設(shè)置請求頭 這里為什么不設(shè)置通配符 * 因為不支持 add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token'; # 設(shè)置 options 請求處理 if ( $request_method = 'OPTIONS' ) { return 200; } # 設(shè)置反向代理 proxy_pass 127.0.0.1:8081/; } }
兩者代碼區(qū)別 主要就是下面這行代碼
if ( $request_method = 'OPTIONS' ) { return 200; }
因為 post 請求 瀏覽器會發(fā)送一個 options 的預(yù)檢請求,主要將本次的請求頭 發(fā)送給服務(wù)端,若服務(wù)端允許,再發(fā)送真正的post請求,所以 f12 看到,經(jīng)常 post 會發(fā)送兩次請求。因為后端 java 代碼沒有對 options 請求做出處理,導(dǎo)致 options 接口請求的時候,報 403 forbidden , 這里 nginx 對 options 的請求直接返回 200,不用到達接口層,直接允許 post 響應(yīng)頭,即可使得上述失效配置能夠生效
附贈 一個小知識點
proxy_pass 127.0.0.1:8081/;
針對反向代理里面這個/ 加不加的問題;
訪問 http://localhost/api/user/login;
- 加/ 則 實際訪問的是 127.0.0.1:8081/user/login;
- 不加 / 則實際訪問的是 127.0.0.1:8081/api/user/login;
加了斜杠意味著所有的 /api 請求都會轉(zhuǎn)發(fā)到根目錄下,也就是說 /api 會被 / 替代,這個時候接口路徑就變了,少了一層 /api 。而不加斜杠的時候呢?這代表著轉(zhuǎn)發(fā)到127.0.0.1:8081的域名下, /api 的路徑不會丟失
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解nginx.conf 中 root 目錄設(shè)置問題
這篇文章主要介紹了詳解nginx.conf 中 root 目錄設(shè)置問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09nginx開啟https配置之后網(wǎng)頁無法訪問的問題處理解決
最近新購服務(wù)器部署nginx之后按照之前的方式部署前端項目并配置https之后訪問頁面無法顯示,本文主要介紹了nginx開啟https配置之后網(wǎng)頁無法訪問的問題處理解決,具有一定的參考價值,感興趣的可以了解一下2023-11-11基于nginx實現(xiàn)上游服務(wù)器動態(tài)自動上下線無需reload的實現(xiàn)方法
這篇文章主要介紹了基于nginx實現(xiàn)上游服務(wù)器動態(tài)自動上下線無需reload,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02Nginx 壓縮(gzip、gunzip、gzip_static、send_file)的實現(xiàn)
在Web應(yīng)用開發(fā)中,優(yōu)化網(wǎng)站速度是一個非常重要的工作,本文主要介紹了Nginx 壓縮(gzip、gunzip、gzip_static、send_file)的實現(xiàn),感興趣的可以了解一下2024-09-09