當前位置:
首頁 > 知識 > Nginx反向代理和負載均衡部署指南

Nginx反向代理和負載均衡部署指南

1、找到並打開conf文件

Nginx反向代理和負載均衡部署指南

2、負載均衡配置

nginx 的 upstream默認是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

另外一種方式是ip_hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。

負載均衡是我們大流量網站要做的一個東西,下面我來給大家介紹在Nginx伺服器上進行負載均衡配置方法,希望對有需要的同學有所幫助哦。

負載均衡

先來簡單了解一下什麼是負載均衡,單從字面上的意思來理解就可以解釋N台伺服器平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閑置的情況。那麼負載均衡的前提就是要有多台伺服器才能實現,也就是兩台以上即可。

測試環境

測試域名 :a.com

A伺服器IP :192.168.5.149 (主)

B伺服器IP :192.168.5.27

C伺服器IP :192.168.5.126

部署思路

A伺服器做為主伺服器,域名直接解析到A伺服器(192.168.5.149)上,由A伺服器負載均衡到B伺服器(192.168.5.27)與C伺服器(192.168.5.126)上。

A伺服器nginx.conf設置

打開nginx.conf,文件位置在nginx安裝目錄的conf目錄下。

在http段加入以下代碼

upstream a.com {

server 192.168.5.126:80;

server 192.168.5.27:80;

}

server{

listen 80;

server_name a.com;

location / {

proxy_pass http://a.com;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

保存重啟nginx

B、C伺服器nginx.conf設置

打開nginx.confi,在http段加入以下代碼

server{

listen 80;

server_name a.com;

index index.html;

root /data0/htdocs/www;

}

保存重啟nginx

測試

當訪問a.com的時候,為了區分是轉向哪台伺服器處理我分別在B、C伺服器下寫一個不同內容的index.html文件,以作區分。

打開瀏覽器訪問a.com結果,刷新會發現所有的請求均分別被主伺服器(192.168.5.149)分配到B伺服器(192.168.5.27)與C伺服器(192.168.5.126)上,實現了負載均衡效果。

假如其中一台伺服器宕機會怎樣?

當某台伺服器宕機了,是否會影響訪問呢?

我們先來看看實例,根據以上例子,假設C伺服器192.168.5.126這台機子宕機了(由於無法模擬宕機,所以我就把C伺服器關機)然後再來訪問看看。

我們發現,雖然C伺服器(192.168.5.126)宕機了,但不影響網站訪問。這樣,就不會擔心在負載均衡模式下因為某台機子宕機而拖累整個站點了。

如果b.com也要設置負載均衡怎麼辦?

很簡單,跟a.com設置一樣。如下:

假設b.com的主伺服器IP是192.168.5.149,負載均衡到192.168.5.150和192.168.5.151機器上

現將域名b.com解析到192.168.5.149IP上。

在主伺服器(192.168.5.149)的nginx.conf加入以下代碼:

upstream b.com {

server 192.168.5.150:80;

server 192.168.5.151:80;

}

server{

listen 80;

server_name b.com;

location / {

proxy_pass http://b.com;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

保存重啟nginx

在192.168.5.150與192.168.5.151機器上設置nginx,打開nginx.conf在末尾添加以下代碼:

server{

listen 80;

server_name b.com;

index index.html;

root /data0/htdocs/www;

}

保存重啟nginx

完成以後步驟後即可實現b.com的負載均衡配置。

主伺服器不能提供服務嗎?

以上例子中,我們都是應用到了主伺服器負載均衡到其它伺服器上,那麼主伺服器本身能不能也加在伺服器列表中,這樣就不會白白浪費拿一台伺服器純當做轉發功能,而是也參與到提供服務中來。

如以上案例三台伺服器:

A伺服器IP :192.168.5.149 (主)

B伺服器IP :192.168.5.27

C伺服器IP :192.168.5.126

我們把域名解析到A伺服器,然後由A伺服器轉發到B伺服器與C伺服器,那麼A伺服器只做一個轉發功能,現在我們讓A伺服器也提供站點服務。

我們先來分析一下,如果添加主伺服器到upstream中,那麼可能會有以下兩種情況發生:

1、主伺服器轉發到了其它IP上,其它IP伺服器正常處理;

2、主伺服器轉發到了自己IP上,然後又進到主伺服器分配IP那裡,假如一直分配到本機,則會造成一個死循環。

怎麼解決這個問題呢?因為80埠已經用來監聽負載均衡的處理,那麼本伺服器上就不能再使用80埠來處理a.com的訪問請求,得用一個新的。於是我們把主伺服器的nginx.conf加入以下一段代碼:

server{

listen 8080;

server_name a.com;

index index.html;

root /data0/htdocs/www;

}

重啟nginx,在瀏覽器輸入a.com:8080試試看能不能訪問。結果可以正常訪問

既然能正常訪問,那麼我們就可以把主伺服器添加到upstream中,但是埠要改一下,如下代碼:

upstream a.com {

server 192.168.5.126:80;

server 192.168.5.27:80;

server 127.0.0.1:8080;

}

由於這裡可以添加主伺服器IP192.168.5.149或者127.0.0.1均可以,都表示訪問自己。

重啟Nginx,然後再來訪問a.com看看會不會分配到主伺服器上。

主伺服器也能正常加入服務了。

最後

一、負載均衡不是nginx獨有,著名鼎鼎的apache也有,但性能可能不如nginx。

二、多台伺服器提供服務,但域名只解析到主伺服器,而真正的伺服器IP不會被ping下即可獲得,增加一定安全性。

三、upstream里的IP不一定是內網,外網IP也可以。不過經典的案例是,區域網中某台IP暴露在外網下,域名直接解析到此IP。然後又這台主伺服器轉發到內網伺服器IP中。

四、某台伺服器宕機、不會影響網站正常運行,Nginx不會把請求轉發到已宕機的IP上

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

windows離線狀態下源碼安裝Robotframework 環境及依賴包
Python super 詳解

TAG:程序員小新人學習 |