nginx負載均衡和反向代理跨域


轉自:  https://blog.csdn.net/zhoulu001/article/details/53074845

 

nginx是一個高性能的Http服務器,有兩個默認的模塊proxy_passupstreamproxy_pass可以很方便的進行反向代理,然后配合upstream可以很方便的實現負載均衡。

    在nginx的根路徑下的conf文件夾下的nginx.conf就是我們需要關注的配置文件。

   1. proxy_pass

    在serverlisten指定了服務器的斷開,server_name指定了域名,location過濾訪問的請求,proxy_pass設置了一個url,意思就是當前反向代理的目標服務器地址。

    所以當我們在本地訪問http://localhost:4444的時候,nginx會將我們的請求反向代理到proxy_pass指定的目標服務器。

     2.upstream

    上面的請求都會反向代理到proxy_pass設置的目標服務器上,但如果目標服務器宕機了怎么辦?這個時候我們可以設置負責均衡,upstream就可以派上用場了。

    upstream可以設置多台服務器,然后通過proxy_pass指向upstream,從而當我們訪問http://localhost:4444的時候,就反向代理到了upstream中的某一台服務器中了。

    而具體是反向代理到upstream中的哪一台服務器,我么可以設置對應的算法。

    i).默認是采用輪詢機制,就是采用輪詢的方式反向代理;

    ii).設置權重weight,我們可以通過設置weight來指定服務器被訪問的權重,權重越大,反向代理過去的機會就越大;

    iii). ip_hash的方式:因為每一個ip對應一個唯一的hash值,這樣來自同一個ip的請求會反向代理到特定的某一台機器上。

     3.跨域

      前端跨域有很多方式,比如JSONP,服務端代理和html5access-control-allow-orgin等。但這一一些方式都需要根據需要修改相關的前端或者后端代碼。但nginx跨域不需要修改任何代碼。

    從上面我們知道,nginxproxy_pass可以將我們的請求通過proxy_pass反向代理到目標服務器上,nginx跨域就是利用反向代理來實現。比如我們需要訪問某個后端api,假設它的地址是http:://xxxxx/api/myrequest,並且后端api的地址都是以http;//xxxxx/api開頭。因為使用ajax直接訪問該地址肯定存在跨域問題,那么如何配置nginx的配置文件呢?

    只增加一個對應的location去過濾請求,然后進行反向代理,我們捕捉所有以/api開頭的請求。

    有兩種方式:

    i. 方式一:

  1.  
    location /api/ {
  2.  
     
  3.  
    proxy_pass http: //xxxxx/api;
  4.  
    }

   ii. 方式二:

    

  1.  
    location /api/ {
  2.  
     
  3.  
    proxy_pass http: //xxxxx/api/;
  4.  
    }

    方式二比方式一多了一個/。

    區別就是:

    方式一: 如果用戶訪問的是http://?????/api/getInfo,反向代理到的是http://xxxxx/api/getInfo

    方式二: 如果用戶訪問的是http://?????/api/getInfo,反向代理到的是http://xxxxx/getInfo

這樣就達到了跨域了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM