Nginx轉發地址解決跨域問題

什麼是跨域問題

在一個服務器A裏放置了json文件,另外一個服務器B想向A發送ajax請求,獲取此文件,會發生錯誤。html

Chrome提示:linux

XMLHttpRequest cannot load ******. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

這就是跨域問題。解決方案有很多,比較好的是服務器端配置CORS,但要求服務器端作更改。若是在不須要更改服務器端的狀況下解決呢?尤爲是須要在本地測試的時候。nginx

配置Nginx

打開nginx目錄下的conf文件夾。打開nginx.conf,將其中的http請求修改成:ajax

http {
    include mime.types;
    server {
        listen       80;
        server_name  localhost;
        charset UTF-8;

    location / {
        root html;
        index index.html index.htm;
    }

        # Avoid CORS and reverse proxy settings
        location /api/ { # [2]
            proxy_http_version 1.1;
            proxy_pass http://www.des.com/; # [3]

            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
        }
    }
}

注意粗體字的部分,/api/表示當請求api目錄時,轉向http://www.des.com/域名。
例如,請求:sql

http://127.0.0.1/api/ 就會轉向 http://www.des.com/json

http://127.0.0.1/api/aaa/bbb/ 就會轉向 http://www.des.com/aaa/bbb/windows

這種由服務器轉發的請求,能夠突破跨域的限制,所以ajax也能夠正常工做。api

注意:/api/ 不行寫成 /api。 跨域

http://www.des.com/ 也不能寫成 http://www.des.com服務器

配置hosts

爲了在本機測試看起來更像在目標服務器上測試,能夠設置系統的hosts文件。
每一個系統(windows、linux、Mac OS)都有hosts文件,它是本地的域名解析器。
一般,咱們請求一個域名,如www.baidu.com,首先要向域名服務器請求百度的IP地址,而後再根據IP地址來訪問。

也能夠不須要諮詢域名服務器,直接在本地的hosts鍵入百度的IP地址。例如
252.192.0.15 www.baidu.com

這樣,系統會先從hosts文件裏搜索IP地址。

Windows下的hosts文件位於:C:\Windows\System32\drivers\etc

打開後,添加

127.0.0.1 www.des.com

則,每次訪問www.des.com,就會連接到本地。

相關文章
相關標籤/搜索