利用Nginx構建負載均衡伺服器

2021-06-21 22:10:23 字數 2200 閱讀 3286

大家都知道,乙個網域名稱對應乙個ip位址,而乙個website則對應乙個ip位址上對應埠服務的應用程式(或位置)。而大型**的併發訪問量非常大,這些**是如何在一台web伺服器上實現負載均衡的呢?

相信很多人會有與我同樣的疑惑,但實際上成熟的解決方案已經大規模投入使用。而常用的則是反向**方法。

反向**(reverse proxy)方式是指以**伺服器來接受internet上的連線請求,然後將請求**給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時**伺服器對外就表現為乙個伺服器。基本結構可以如下圖所示:

從此圖可以看出,使用者訪問的web伺服器實際上是乙個**伺服器,而真正處理內容(等一系列複雜操作)都是由牆內的伺服器完成的。這不僅減輕了**伺服器的壓力,同時也可以使牆內伺服器與客戶機隔離,防止一些安全問題的發生。此時,只需要增加牆內伺服器,使用者雖然訪問的是同一位址,但可能訪問的實際伺服器會完全不一樣。

以上只是一些理論,如何實現呢?採用nginx可以輕鬆完成這一功能。

當然首先簡單了解一下nginx是什麼 。

nginx

("engine x") 是一款高效能的,輕量級的

伺服器 和 

反向**伺服器

及電子郵件 

imap/pop3/smtp

**伺服器。首先它是一款web伺服器,又是一款效能優秀的反向**伺服器

2、配置檔案。conf/nginx.conf

預設的配置如下,可以簡單看一下

整體配置與apache略相似,如果開發的時候,可以開啟相關log引數,error_log和access_log即可。server內的內容顯示,定義了乙個伺服器,監聽80埠,位置為/html/*,主頁為index.html,並將50x錯誤重定向到50x.html。

也可以定義virtualhost,並將位置定位到其他path。

3、不同位址的**。

nginx可以實現對不同位址的反向**(這裡並非指不同ip或者網域名稱位址,而是路徑),例如希望將所有顯示部分(/view/***)的交給a伺服器,位址為x.x.x.101,邏輯處理部分(/control/***)交給b伺服器,位址為x.x.x.102,可以新增如下配置

~表示採用正規表示式匹配,若在location後新增^~表示不以正則式匹配,上面配置將所有/view/*.php的請求交給了而/control

/*.php的請求交給了

在邏輯上實現**與分離。

當然在a、b伺服器上,可以構建各自需要的如apache伺服器或tomcat甚至nodejs

4、同位址負載均衡。

如果是同一位址的併發訪問量巨大,需要進行負載均衡。例如某一搶購頁面或者某一類頁面。可以新增如下配置定義乙個web伺服器集群:

upstream webcluster
同時,給該集群配置乙個location,方法同上:

location ~ \/views/[\s]+php$

此時再訪問/views下的所有目錄,都會被平均分配到集群中的所有機器上。

upstream webcluster
這樣一共weight = 5,101伺服器會有2/5的權重,其他為1/5。

以上則是大型**在web端的負載均衡的實現,該實現方法最為廉價和高效。當然,還有很多其他實現負載均衡的方法,例如使用一些大型硬體進行ip重定向等等。

利用Nginx做負載均衡

最近正在研究nginx,nginx作為反向 伺服器,可以對web伺服器提供加速,並且具有負載均衡的功能。在windows版本中,將壓縮包進行解壓,執行命令 1 start nginx 這樣就可以啟動nginx服務了。而執行命令 1 nginx s stop 可以停止服務。這是我在192.168.3....

利用Nginx做負載均衡

最近正在研究nginx,nginx作為反向 伺服器,可以對web伺服器提供加速,並且具有負載均衡的功能。在windows版本中,將壓縮包進行解壓,執行命令 1 start nginx 這樣就可以啟動nginx服務了。而執行命令 1 nginx s stop 可以停止服務。這是我在192.168.3....

利用nginx實現負載均衡

我這裡是使用docker安裝的。安裝流程可參照 dockerfile 這裡安裝了兩個tomcat,埠分別是42000和42001。第二個tomcat的首頁隨便加了些 區分 這裡的網域名稱要和下面proxy pass的一樣 重新整理頁面發現頁面會發生變化,證明負載配置成功。因為我配的權重第二個是第乙個...