經過 Nginx 提供的反向代理和負載均衡功能,能夠合理的完成業務的分配,提升網站的處理能力;同時利用緩存功能,還能夠將不須要實時更新的動態頁面輸出結果,轉化爲靜態網頁造成緩存,從而提升網站的響應速度。nginx
代理和反向代理web
代理(正向代理,目標服務器不知道誰在訪問)算法
位於客戶端和目標服務器之間,起到一箇中轉的做用。其實就是客戶端想訪問目標服務器,可是由於某些緣由不可以直接訪問,則把請求和目標服務器發給代理服務器,代理服務器再去請求目標服務器,把返回的響應結果返回給客戶端。後端
反向代理(用戶實際並不知道最終服務器,只是訪問一個反向代理服務器而已)緩存
客戶端會把反向代理服務器當成目標服務器,向反向代理服務器發送請求後,反向代理服務器再請求內部的後端服務器,把獲得的響應結果返回給客戶端。安全
特性:服務器
- 安全性。反向代理具備安全性。能隱藏真實的內部服務器。
- 功能性。正向代理主要用途是爲防火牆內的局域網用戶提供訪問外網的途徑。反向代理主要用途是將防火牆內的服務器提供給外邊的用戶訪問,同時也能夠爲多個後端服務器提供負載均衡功能、緩存功能等。
反向代理服務配置架構
在 Nginx 配置文件中的 location 塊中,這是 proxy_pass 指令。負載均衡
- server{
- listen 80;
- server_name test.test;
- #將本機接收到的test.test的請求所有轉發到另一臺服務器192.168.78.128
- location /{
- proxy_pass http://192.168.78.128;
- #下面是其餘輔助指令
- proxy_set_header Host $host; #更改來自客戶端的請求頭信息
- proxy_set_header X-Real_IP $remote_addr; #用戶真實訪問ip
- proxy_connect_timeout 2; #配置nginx與後端服務器創建鏈接的超時時間
- proxy_read_timeout 2; #配置nginx向後端發出read請求的等待響應超時時間
- proxy_send_timeout 2; #配置nginx向後端服務器發出write請求的等待響應超時時間
- proxy_redirect http://www.baidu.com; #用於修改後端服務器返回的響應頭中的Location和Refresh
- }
- }
負載均衡網站
負載均衡(load balance):就是將負載分攤到多個操做單元上執行,從而提升服務的可用性和響應速度。
1.一個沒有負載均衡的 web 架構以下圖:
用戶直接鏈接服務器,這個時候若是這臺服務器掛了,那麼就整個網站掛了。
2.有負載均衡的 web 架構
用戶不直接訪問後端服務器,而是訪問負載均衡服務器,由負載均衡服務器再次轉發到後端服務器。若是這個時候有一臺後端服務器掛掉了,那麼負載均衡服務器會剔除掉它,將後續請求都轉發到好的那臺,這樣就不影響網站的正常運行。這個時候咱們也須要考慮負載均衡服務器會不會掛掉,那就引入第二個負載均衡服務器來緩解一下。
負載均衡的配置
經過配置負載均衡服務器的 Nginx 中的 upstream 指令能夠實現。
不一樣負載均衡配置的特色以下圖所示:
通常輪詢配置
- server{
- listen 80;
- server_name test.test;
- location / {
- proxy_pass http://web_server; #反向代理
- }
- }
- #配置負載均衡服務器組
- upstream web_server {
- server 192.168.78.128;
- server 192.168.78.129;
- }
加權輪詢配置
- #配置負載均衡服務器組
- upstream web_server {
- server 192.168.78.128 weight=1;
- server 192.168.78.129 weight=3;
- }
這裏面的權值總和爲一個循環,這裏以 4 次爲一個循環,那麼就是每四次請求中,三次會被分派到 129 這個服務器,一次分配到 128,可是具體三次並不會順序執行,而是按照算法分散執行。 咱們也能夠設置每臺 web 服務器在負載均衡調度中的狀態。
- upstream web_server{
- server 192.168.78.128 weight=1 max_fails=1 fail_timeout=2; #容許請求失敗次數,在請求max_fail次數失敗後,暫停服務的時間
- server 192.168.78.200 backup; #預留的備份服務器
- server 192.168.78.33 down; #當前服務器不參與負載均衡
- }
ip_hash 配置
- upstream web_server{
- ip_hash;
- server 192.168.78.120;
- server 192.168.78.123;
- server 192.168.78.33 down; #若是這臺服務器宕機,則用down表示當前服務器暫不參與負載均衡
- }
使用 ip_hash 的時候,不能使用 weight 和 backup。
第三方模塊(fair)
安裝fair模塊的步驟略過...
配置 fair 的負載均衡
- server{
- listen 80;
- server_name test.test;
- location / {
- proxy_pass http://web_server
- }
- }
- upstream web_server{
- server 192.168.78.128;
- server 192.168.78.132;
- fair; #使用fair
- }