Nginx配置跨域(CORS)
阿新 • • 發佈:2022-03-25
現在前、後端分離已經是web應用最常見的架構。但由於瀏覽器的同源策略導致web應用訪問不同域的資源不得不面臨跨域問題。如下圖所示:
簡單說下專案的現狀:
1、後臺(服務端)採用紅帽的開源嵌入式web伺服器(Undertow)部署;
2、前端,使用VueJS+element ui開發,通過Nginx進行託管;
言歸正傳。
1、Nginx下載、安裝,不懂的自己想辦法,<< 傳送門 >>
2、開啟Nginx根目錄,config,找到 nginx.cnf 檔案,新增以下配置:
2.1. 前端路由配置
server { listen 8000; server_name localhost 127.0.0.1; location / { root c:\root\web\app; index index.html index.htm; } }
2.2. 後臺介面路由配置
server { listen 8009; server_name localhost 127.0.0.1; location /api { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,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'; add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain; charset=utf-8'; add_header 'Content-Length' 0; return 204; } proxy_pass http://127.0.0.1:8010; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 5; } }
特別說明:
(1)/api,是因為介面action key是/api開頭,如果你的介面是這樣(如:http://example.com/news/search?page=1&size=50),可以設定為 '/',即標識匹配所有請求。
(2)配置跨域的內容在後臺路由配置裡面,也就是 proxy_pass 以上的內容。
(3)關於埠,8000是前臺頁面的埠、8009是Vue使用Axios外掛配置的服務端API埠,8010是Undertow給後臺(服務端)指定的埠。
3、再次測試,已經能夠正常返回資料!