1. 程式人生 > 其它 >Nginx配置跨域(CORS)

Nginx配置跨域(CORS)

現在前、後端分離已經是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、再次測試,已經能夠正常返回資料!