聊聊 Nginx 的反向代理

聊聊 Nginx 的反向代理

背景

最近在優化服務基礎設施這塊,正好有時間寫一下Nginx的體會。相信大家都聽說過反向代理,一提到反向代理一定會想到Nginx。什麼你沒聽過Nginx?那麼你一定聽說過Apache吧!Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。Apache的發展時期很長,而且是毫無爭議的世界第一大服務器。它有著很多優點:穩定、開源、跨平臺等等。它出現的時間太長了,它興起的年代,互聯網產業遠遠比不上現在。所以它被設計為一個重量級的。它不支持高併發的服務器。在Apache上運行數以萬計的併發訪問,會導致服務器消耗大量內存。操作系統對其進行進程或線程間的切換也消耗了大量的CPU資源,導致HTTP請求的平均響應速度降低。所以這些都決定了Apache不可能成為高性能WEB服務器,輕量級高併發服務器Nginx就應運而生了。

什麼是Nginx

俄羅斯的工程師Igor Sysoev,他在為Rambler Media工作期間,使用C語言開發了Nginx。Nginx作為WEB服務器一直為Rambler Media提供出色而又穩定的服務。然後呢,Igor Sysoev將Nginx代碼開源,並且賦予自由軟件許可證。

由於:

  • Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器(這是個開源的時代啊~)
  • Nginx是一個跨平臺服務器,可以運行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系統上。
  • 可以作為反向代理進行負載均衡的實現,帶來的極大的穩定性。

Nginx這樣做的目的主要是將數據的承載量分攤到多個服務器上進行執行,這只是在服務基礎設施上提高性能的優化手段之一。從下面圖就可以看出:

聊聊 Nginx 的反向代理

什麼是反向代理?

看了網上很多篇文章,下面這段話是我個人覺得介紹的最清楚的。

反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的連接請求,然後將請求轉發給內部網絡上的服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。

所以反向代理服務器是引用在服務端。決定哪臺服務器提供服務。

那麼我就模擬了一個基本的反向代理和負載均衡配置實現,下面是我的操作步驟:

反向代理的模擬

首先創建多個 tomcat 服務器,我這裡創建了三個:

聊聊 Nginx 的反向代理

然後修改每個 tomcat 運行在不同的端口號上,每個 server.xml配置文件需要修改三處端口:

聊聊 Nginx 的反向代理

分別在 8080,8081,8082 端口配置 8006,8081,8010 端口,分別進行啟動測試,但是注意防火牆配置問題。測試結果如下:

聊聊 Nginx 的反向代理

接著配置 nginx 的配置文件,進行反向代理:

聊聊 Nginx 的反向代理

最後不斷訪問剛配置的 test.tomcats.com 域名,發現三臺 tomcat 成功運行的頁面都有出現,比例大致 1:1:1:

聊聊 Nginx 的反向代理

恭喜你,配置成功了!

配置負載均衡

其實很簡單,就是在剛剛配置的 nginx 文件中 的 upstream tomcats 中的 server 後面添加一個 weight, 即可代表權重。權重越高,分派請求的數量就越多。默認權重是 1。

聊聊 Nginx 的反向代理
作者:小碼哥的freestyle來源:慕課網


分享到:


相關文章: