Nginx反向代理和負載均衡

上次分享了怎么用docker創(chuàng)建nginx服務(wù) 說到nginx 我們往往都會用到nginx的兩個重要功能钧大,反向代理和負載均衡激才,今天我來和大家分享一下Nginx的反向代理和負載均衡

什么是反向代理劣挫?

說到反向代理东帅,大家一般都會提一下:正向代理,正向代理就是代理帐我,比如我們寫爬蟲的時候IP被封拦键、Google的時候404,這個時候我們都會用到代理芬为,你可以把代理理解成一個跳板媚朦,我們的電腦不能訪問Google,那我們就去訪問能訪問Google的服務(wù)器日戈,一般我都是在這兩種情況下使用代理浙炼,可能有更高深的用法,具體我也沒用過半火。 說完代理季俩,就來說一下我們今天的主角--反向代理

定義

反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求酌住,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端消痛,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器

功能

對客戶端隱藏服務(wù)器的IP地址 通過緩存靜態(tài)資源秩伞,加速Web請求 更安全,因為任何來自Internet的請求都必須先經(jīng)過代理服務(wù)器展氓,可以在這里做防護(例如ip過濾)

實現(xiàn)方法:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_pass http://abc.com;
}

第一次看到上面這些內(nèi)容時脸爱,大多人可能還是不明白 簡單點說就是你有A、B兩臺服務(wù)器空入,這兩臺服務(wù)器上都放著你的代碼歪赢,當(dāng)用戶訪問你的內(nèi)容時导梆,會訪問A服務(wù)器,A服務(wù)器再去請求B內(nèi)容返回給用戶递鹉,用戶不知道請求的是B躏结,這樣就是實現(xiàn)了反向代理

下面我們通過以下簡單的幾步演示一下反向代理
通過上一篇的Docker創(chuàng)建Nginx服務(wù)媳拴,我們可以快速創(chuàng)建3個nginx服務(wù)兆览,來模擬3臺服務(wù)器

  • 首先創(chuàng)建一個nginx的配置文件
#創(chuàng)建 nginx配置文件
touch nginx.conf 
# 創(chuàng)建a、b子巾、c三個文件夾存放項目
mkdir a b c
  • 編寫Nginx配置文件
# Nginx的配置文件,這里主要作用是為了指定端口和項目路徑
events {
    #每個工作進程的并發(fā)連接數(shù)
    worker_connections 1024;
}
http {
        server {
               #監(jiān)聽端口
                listen 80;
                #綁定域名
                server_name localhost;
                #項目路徑
                root /nginx/share/nginx/html;
        }
}
  • 啟動Nignx服務(wù)

#創(chuàng)建a容器
docker run -p 80:80 -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf
 -v $PWD/html/a:/usr/share/nginx/html --name a-server -d nginx
#創(chuàng)建b容器
docker run -p 80:8081 -v $PWD/html/b:/usr/share/nginx/html 
--name b-server -d nginx
#創(chuàng)建c容器
docker run -p 80:8082 -v $PWD/html/c:/usr/share/nginx/html 
--name c-server -d nginx 
 
#參數(shù)解釋
    -p 8080:80 將容器的80端口映射到宿主機的8080端口
    -v $PWD/a.conf:/etc/nginx/nginx.conf 
    將宿主機中當(dāng)前目錄下的a.conf掛載到容器的/etc/nginx/nginx.conf
    -v $PWD:/a  將主機中當(dāng)前目錄a掛載到容器的/usr/share/nginx/html
    --name 容器的名稱
    -d 后臺運行容器线梗,并返回容器ID
  • 判斷Nginx是否啟動成功
docker ps -a 查看容器是否成功啟動
或者
curl 127.0.0.1 
curl 127.0.0.1:8081 
curl 127.0.0.1:8082

  • 修改配置文件
events {
    #每個工作進程的并發(fā)連接數(shù)
    worker_connections 1024;
}
http {
    server {
        #監(jiān)聽端口
        listen 80;
        #綁定域名
        server_name localhost;
        #項目路徑
        root /nginx/share/nginx/html;
        
        # 反向代理
        location /b {
            rewrite ^/b(.*) /$1 break;
            proxy_pass http://127.0.0.1:8081
        }
        
        # 反向代理
        location /c {
            rewrite ^/c(.*) /$1 break;
            proxy_pass http://127.0.0.1:8082
        }
    }
}

這個時候就我們就已經(jīng)實現(xiàn)了方向代理,可以在瀏覽器中訪問

http://127.0.0.1  輸出this is a
http://127.0.0.1/b 輸出 this is b 
http://127.0.0.1/c 輸出 this is c

今天的另外一個主角是負載均衡

什么是負載均衡 很多新手在聽說負載均衡的時候蜻牢,都會感覺是很高深莫測偏陪,其實實現(xiàn)起來也不難竹挡, 下面我們修改配置實現(xiàn)一個簡單的負載均衡
首先來了解一下負載均衡

定義

用來在多個計算機立膛、網(wǎng)絡(luò)連接宝泵、CPU儿奶、磁盤驅(qū)動器或其他資源中分配負載鳄抒,以達到最優(yōu)化資源使用、最大化吞吐率瓤鼻、最小化響應(yīng)時間茬祷、同時避免過載的目的并蝗。 使用帶有負載平衡的多個服務(wù)器組件,取代單一的組件沃粗,可以通過冗余提高可靠性

功能

將流量分配給多個應(yīng)用程序服務(wù)器最盅,提高Web應(yīng)用程序的可伸縮性和可靠性

實現(xiàn)方法

http {
    upstream myServer {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://myServer;
        }
    }
}

對于上面的很官方定義檩禾,我再用大白話解釋一下盼产, 將用戶的請求分配到壓力小的服務(wù)器上勺馆,從而減輕服務(wù)器壓力

下面我們通過簡單的Demo演示一下負載均衡

修改剛才的配置文件nginx.conf

events {
    #每個工作進程的并發(fā)連接數(shù)
    worker_connections 1024;
}
http {
    #定義負載均衡設(shè)備的 Ip及設(shè)備狀態(tài) 
    upstream myServer {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
    }
    
    server {
        #監(jiān)聽端口
        listen 80;
        #綁定域名
        server_name localhost;
        #項目路徑
        root /nginx/share/nginx/html;
        
        location / {
            proxy_pass http://myServer;
        }
    }
}
打開瀏覽器輸入http://127.0.0.1 我們刷新瀏覽器,就輸出this is b或者this is a

到這里反向代理和負載均衡的基本配置就分享完了搓译。

但是機智的你可能會發(fā)提出一些疑問些己,通過負載均衡嘿般,用戶訪問到B服務(wù)器時,下次刷新又去訪問C服務(wù)器逼庞,能不能還繼續(xù)訪問A服務(wù)器赛糟。當(dāng)然Nginx提供了方法 具體配置內(nèi)容如下

upstream myServer {            
  #weight 指定輪詢幾率砸逊,如果現(xiàn)在有5個請求,
  #有4個會請求到B服務(wù)器上穆咐,1個請求到C服務(wù)器上对湃,
  #一般我們會把服務(wù)器配置比較高的權(quán)重加大

  server b.com weight=4; 
  server c.com;

  #通過客戶端的IP地址拍柒,確定下一個請求應(yīng)該選擇哪個服務(wù)器
  ip_hash;            
}

本次主要分享了Nginx的反向代理和負載均衡拆讯,當(dāng)然种呐,分享的內(nèi)容還是比較基礎(chǔ),Nginx雖然體積不大爽室,但是功能很全面阔墩,更多模塊和配置文件可以去查看官方文檔

注意事項

  • 如果 nginx沒有開啟熱更新啸箫,修改配置文件一定要重啟
#docker 容器的重啟命令
docker restart id(容器ID)
#不是使用docker安裝的nginx
service nginx restart
  • 反向代理中nginx的配置 proxy_pass
 location /c {
         #如果是綁定目錄,這里的rewrite一定要寫
         rewrite ^/c(.*) /$1 break;
         # docker容器中這里一定要填寫本機的ip地址蝉娜,不能填寫127.0.0.1
         proxy_pass http://117.189.124.134:8082;
    }

總結(jié):Nginx的反向代理蜀肘、負載均衡配置還是比較簡單的,主要用到proxy_pass和upstream西乖,避免上述幾個坑,應(yīng)該沒有什么問題获雕,本人對Nginx只是屬于入門階段薄腻,如有錯誤,歡迎指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末届案,一起剝皮案震驚了整個濱河市庵楷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楣颠,老刑警劉巖尽纽,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異童漩,居然都是意外死亡弄贿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門矫膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來差凹,“玉大人,你說我怎么就攤上這事∮事蹋” “怎么了顾腊?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵吗垮,是天一觀的道長。 經(jīng)常有香客問我,道長狼牺,這世上最難降的妖魔是什么缅叠? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上宋舷,老公的妹妹穿的比我還像新娘绎狭。我一直安慰自己喇聊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布邻遏。 她就那樣靜靜地躺著准验,像睡著了一般腕柜。 火紅的嫁衣襯著肌膚如雪蓖扑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天嗓奢,我揣著相機與錄音钳幅,去河邊找鬼厂榛。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的证芭。 我是一名探鬼主播官硝,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼岖研,長吁一口氣:“原來是場噩夢啊……” “哼赃磨!你這毒婦竟也來了值骇?” 一聲冷哼從身側(cè)響起吱瘩,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤矢门,失蹤者是張志新(化名)和其女友劉穎宣旱,沒想到半個月后买置,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寞酿,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蔓腐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年硫椰,在試婚紗的時候發(fā)現(xiàn)自己被綠了萨蚕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浩蓉。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡捻艳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恩急,到底是詐尸還是另有隱情随珠,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布盖彭,位于F島的核電站隧熙,受9級特大地震影響片挂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贞盯,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一音念、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躏敢,春花似錦闷愤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛾扇,卻和暖如春攘烛,著一層夾襖步出監(jiān)牢的瞬間魏滚,已是汗流浹背镀首。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鼠次,地道東北人更哄。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓芋齿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親成翩。 傳聞我的和親對象是個殘疾皇子觅捆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容