利用Nginx反向代理解決跨域問題

問題

在以前的分享的跨域資源共享的文章中,有提到要注意跨域時,若是要發送Cookie,Access-Control-Allow-Origin就不能設爲*,必須指定明確的、與請求網頁一致的域名。在這次項目開發中與他人協做中就遇到此類問題。html

cookie跨域問題

解決思路

  1. 通常來講,與後臺利用CORS跨域資源共享將Access-Control-Allow-Origin設置爲訪問的域名便可,這個須要後臺的配合,且有些瀏覽器是不支持的。
  2. 基於與合做方後臺的配合,利用nginx方向代理來知足瀏覽器的同源策略來實現跨域

實現方法

反向代理概念

反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器;並將從服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。反向代理服務器對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容本來就是它本身的同樣。nginx

利用nginx反向代理實現跨域的步驟

  1. nginx官網下載包搭建nginx環境

下載解壓後

  1. 修改nginx的配置文件,找到ngixn.conf文件,修改相關配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    server {
        listen       8000;  #監聽8000端口,能夠改爲其餘端口
        server_name  localhost; # 當前服務的域名

        location /wili/api/ {
                proxy_pass http://chick.platform.deva.wili.us/api/;  #添加訪問路徑錄爲/will/api的代理配置
                proxy_http_version 1.1;
        }
        
        location / {
                proxy_pass http://localhost:8001;
                proxy_http_version 1.1;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

配置的解釋:json

  • 由配置信息可知,咱們讓nginx監聽localhost的8000端口,網站A與網站B的訪問都是通過localhost的8000端口進行訪問。
  • 咱們特殊配置了一個"/will/api"的訪問,使以"will/api」開頭的地址都轉到"http://chick.platform.deva.wili.us/api/"進行處理。
  • 訪問地址修改
    既然咱們已經配置了nginx,那麼全部的訪問都要走nginx,而不是走網站本來的地址(A網站localhost:8001,B網站http://chick.platform.deva.wi...)。因此要修改A網站中的請求接口換成http://localhost:8000/wili/api/。接下來啓動nginx,訪問配置的8000便可
    enter description here

    須要注意的一點是nginx啓動可能會衝突端口形成啓動不成功,可在任務管理器查看是否啓動成功。api

    啓動成功

總結

瀏覽器跨域的解決方式有不少種:跨域

  1. jsonp 須要目標服務器配合一個callback函數
  2. CORS須要服務器設置header:Access-Control-Allow-Origin
  3. nginx反向代理 這個方法通常不多有人說起,可是他能夠不用目標服務器配合,不過須要你搭建一箇中轉nginx服務器,用於轉發請求。(使用反向代理可能訪問網頁相對於以前響應會比較慢)
相關文章
相關標籤/搜索