nginx的反向代理和負載均衡的一個總結


之前一直覺的nginx的反向代理和負載均衡很厲害的樣子,最近有機會接觸了一下公司的這方面的技術,發現技術就是一張窗戶紙呀,捅破了啥都明白了!

接下來先看一下nginx的反向代理:

簡單的來說就是nginx不去自己處理php相關的請求,而是將php的相關的請求轉發給apache來進行處理。

 

上面就是一個比較簡單的一個反向代理的流程圖,其實我們也可以叫做“動靜分離”,只是反向代理更加的規范。

來看一下它的一個配置:

使用proxy_pass即可進行反向代理,官方給的說明例子:

1 Syntax:    proxy_pass URL;
2 Default:    —
3 Context:    location, if in location, limit_except

我們可以使用類似於下面的這種方法來進行配置:

1 location / {
2     proxy_pass http://127.0.0.1/remote/; --- http是必須要帶的不然的話  是不會生效的
3 }

上面就是反向代理的一個簡單的使用配置。

 

那接下來我們來看一下負載均衡的一個概念:

其實就是多台服務器進行共同工作,反向代理的后端如果有多台服務器,那自然可以形成負載均衡,但我們考慮一下proxpy_pass如何指向多台服務器?

那我們其實可以將多台的服務器用一個upstream 上游的服務器組指定綁定在一起並起個組名,然后使用proxpy_pass指向該組即可。

我們來看一下upstream的一個簡單的定義:

1 Syntax:    upstream name { ... }
2 Default:    —
3 Context:    http

來看一下下面一個簡單的例子:

 1 upstream backend {
 2      server backend1.example.com weight=5; //這台機器會承擔5個請求,剩下的機器會承擔剩余的請求壓力
 3      server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
 4      server unix:/tmp/backend3;
 5  
 6      server backup1.example.com  backup;
 7  }
 8   
 9 server {
10     location / {
11         proxy_pass http://backend;
12     }
13 }

默認的均衡的算法很簡單,就是針對后端服務器的順序,逐個請求.

上面就是一個簡單的負載均衡的一個例子。

那我們打開日志發現,$remot_addr變成了nginx的IP,而不是用戶客戶端的原來的IP,那這時候怎么辦?

 

1 Proxy_set_header X-Forwarded-For  $remote_addr;

 

在每個location中加上這么一句話,就ok了。

 再附一張我們之前測試的一個案例:


免責聲明!

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



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