聊聊 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這樣做的目的主要是將資料的承載量分攤到多個伺服器上進行執行,這只是在服務基礎設施上提高效能的優化手段之一。從下面圖就可以看出:
什麼是反向代理?
看了網上很多篇文章,下面這段話是我個人覺得介紹的最清楚的。
反向代理(Reverse Proxy)方式是指以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器;並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。
所以反向代理伺服器是引用在服務端。決定哪臺伺服器提供服務。
那麼我就模擬了一個基本的反向代理和負載均衡配置實現,下面是我的操作步驟:
反向代理的模擬
首先建立多個 tomcat 伺服器,我這裡建立了三個:
然後修改每個 tomcat 執行在不同的埠號上,每個 server.xml配置檔案需要修改三處埠:
分別在 8080,8081,8082 埠配置 8006,8081,8010 埠,分別進行啟動測試,但是注意防火牆配置問題。測試結果如下:
接著配置 nginx 的配置檔案,進行反向代理:
最後不斷訪問剛配置的 test.tomcats.com 域名,發現三臺 tomcat 成功執行的頁面都有出現,比例大致 1:1:1:
恭喜你,配置成功了!
配置負載均衡
其實很簡單,就是在剛剛配置的 nginx 檔案中 的 upstream tomcats 中的 server 後面新增一個 weight, 即可代表權重。權重越高,分派請求的數量就越多。預設權重是 1。