本文來自于我的慕課網手記:聊聊 Nginx 的反向代理,轉載請保留鏈接 ;)
背景
最近在優(yōu)化服務基礎設施這塊,正好有時間寫一下Nginx的體會。相信大家都聽說過反向代理,一提到反向代理一定會想到Nginx。什么你沒聽過Nginx?那么你一定聽說過Apache吧!Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。Apache的發(fā)展時期很長,而且是毫無爭議的世界第一大服務器。它有著很多優(yōu)點:穩(wěn)定、開源、跨平臺等等。它出現的時間太長了,它興起的年代,互聯網產業(yè)遠遠比不上現在。所以它被設計為一個重量級的。它不支持高并發(fā)的服務器。在Apache上運行數以萬計的并發(fā)訪問,會導致服務器消耗大量內存。操作系統(tǒng)對其進行進程或線程間的切換也消耗了大量的CPU資源,導致HTTP請求的平均響應速度降低。所以這些都決定了Apache不可能成為高性能WEB服務器,輕量級高并發(fā)服務器Nginx就應運而生了。
什么是Nginx
俄羅斯的工程師Igor Sysoev,他在為Rambler Media工作期間,使用C語言開發(fā)了Nginx。Nginx作為WEB服務器一直為Rambler Media提供出色而又穩(wěn)定的服務。然后呢,Igor Sysoev將Nginx代碼開源,并且賦予自由軟件許可證。
由于:
- Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器(這是個開源的時代啊~)
- Nginx是一個跨平臺服務器,可以運行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系統(tǒng)上。
- 可以作為反向代理進行負載均衡的實現,帶來的極大的穩(wěn)定性。
Nginx這樣做的目的主要是將數據的承載量分攤到多個服務器上進行執(zhí)行,這只是在服務基礎設施上提高性能的優(yōu)化手段之一。從下面圖就可以看出:

什么是反向代理?
看了網上很多篇文章,下面這段話是我個人覺得介紹的最清楚的。
反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器;并將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
所以反向代理服務器是引用在服務端。決定哪臺服務器提供服務。
那么我就模擬了一個基本的反向代理和負載均衡配置實現,下面是我的操作步驟:
反向代理的模擬
首先創(chuàng)建多個 tomcat 服務器,我這里創(chuàng)建了三個:

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

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

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

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

恭喜你,配置成功了!
配置負載均衡
其實很簡單,就是在剛剛配置的 nginx 文件中 的 upstream tomcats 中的 server 后面添加一個 weight, 即可代表權重。權重越高,分派請求的數量就越多。默認權重是 1。
