集群反向代理實(shí)現(xiàn)負(fù)載均衡『nginx & apache2』

前言
今天在專題收錄一篇關(guān)于ngixn與apache2實(shí)現(xiàn)負(fù)載均衡的文章,仔細(xì)看了一遍,有些地方存在錯(cuò)誤,記得之前搭建過這樣的環(huán)境,今天呢,好好記錄分享一下。


nginx & apache
簡單說說它倆的優(yōu)點(diǎn)

  • nginx的并發(fā)量高、占用資源少,適用于前端或靜態(tài)服務(wù)
  • apache服務(wù)超級穩(wěn)定,適用于后端或動(dòng)態(tài)服務(wù)

nginx & apache協(xié)作流程
一般而言,我們可以使用nginx以及apache實(shí)現(xiàn)集群服務(wù)器負(fù)載均衡,具體如何實(shí)現(xiàn)的呢?它們的工作流程又是如何的呢?

  • 第一步:客戶端訪問服務(wù)器的時(shí)候?qū)?huì)先訪問nginx服務(wù)器
  • 第二步:nginx接受客戶端請求后將會(huì)將請求轉(zhuǎn)發(fā)到apache
  • 第三步:apache接收nginx的轉(zhuǎn)發(fā)請求將會(huì)處理請求
  • 第四步:apache將處理后的請求返回客戶端,完成一次訪問
nginx & apache協(xié)作流程

Nginx的upstream分發(fā)機(jī)制
upstream按照輪詢(默認(rèn))方式進(jìn)行負(fù)載,每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。雖然這種方式簡便、成本低廉。但缺點(diǎn)是:可靠性低和負(fù)載分配不均衡。適用于圖片服務(wù)器集群和純靜態(tài)頁面服務(wù)器集群?;居腥缦聨追N:

  • 輪詢( 默認(rèn) )
    適用于圖片服務(wù)器集群和純靜態(tài)頁面服務(wù)器集群。
upstream balance{
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
   ... ...
}
  • 指定權(quán)重
    權(quán)重weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
upstream balance{
    server localhost:8080 weight=5;
    server localhost:8081 weight=10;
    server localhost:8082 weight=15;
   ... ...
}
  • IP綁定 ip_hash
    每個(gè)請求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題
upstream balance {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
    ... ...
}
  • fair(第三方)
    按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。
upstream balance {
    fair;
    server localhost:8080;
    server localhost:8081;
    server localhost:8082;
    ... ...
}

nginx & apache安裝

# 對于安裝不多說(基于debian/ubuntu)
sudo apt-get install apache2 nginx -y

重點(diǎn)將在如下

對于更多的負(fù)載均衡理論可以自行搜索,這里旨在實(shí)踐配置。

環(huán)境場景
為了方便配置,所有的服務(wù)都是安裝在同一臺(tái)機(jī)器上面。

Apache版本:Apache/2.4.7 (Ubuntu)
Nginx版本: nginx/1.4.6 (Ubuntu)


  • nginx服務(wù)器只需要一臺(tái)服務(wù)器即可,它的http服務(wù)器的端口使用默認(rèn)的80,
  • apache啟動(dòng)多個(gè)端口,模擬多臺(tái)服務(wù)器的80端口。端口分別為8001、8002、8003、8004。
  • 我們將客戶端的請求通過nginx分別按照指定的分發(fā)機(jī)制轉(zhuǎn)發(fā)到apache的8001、8002、8003、8004端口。
  • nginx采取權(quán)重的分發(fā)機(jī)制

配置Apache
前提:將默認(rèn)的80端口關(guān)閉,因?yàn)?0端口將為nginx所用。將默認(rèn)的000-default.conf.bak重命后綴名即可(非conf)。
(1) 開啟端口監(jiān)聽允許
在apache端口蔣婷配置文件/etc/apache2/ports.conf添加如下信息,記得關(guān)閉80端口監(jiān)聽。

Listen 8001
Listen 8002
Listen 8003
Listen 8004

(2) 配置虛擬目錄映射
個(gè)人習(xí)慣,將每一個(gè)虛擬目錄配置寫一個(gè)配置文件,在這里將新建四個(gè)conf文件,對應(yīng)的配置如下:
/etc/apache2/ites-enabled/8001.conf

<VirtualHost *:8001>
    ServerAdmin localhost:8001
    DocumentRoot /home/alic/www/proxy/8001
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/etc/apache2/ites-enabled/8002.conf

<VirtualHost *:8002>
    ServerAdmin localhost:8002
    DocumentRoot /home/alic/www/proxy/8002
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

剩下的8003.conf、8004.conf就不多說了!
(3) 重啟Apache,沒有問題瀏覽器就可以直接打開各個(gè)端口的訪問了

sudo service nginx restart

配置Nginx
(1) upstream
定義一個(gè)upstream變量,即定義接收轉(zhuǎn)發(fā)的服務(wù)器
/etc/nginx/sites-enabled/default

#代理轉(zhuǎn)發(fā)地址
upstream balance{
    server localhost:8001 weight=5;
    server localhost:8002 weight=10;
    server localhost:8003 weight=15;
    server localhost:8004 weight=20;    
}

(2) server
配置監(jiān)聽80端口的server,將請求轉(zhuǎn)發(fā)到upstream
/etc/nginx/sites-enabled/default

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
        #修改proxy_pass這里即可
        proxy_pass http://balance;
    }

(3) 重啟nginx

sudo service nginx restart

至此,已經(jīng)配置完成了,我們可以檢驗(yàn)檢驗(yàn)?。?!

?  ~ curl 127.0.0.1
I am proxy apache2 port 8003
?  ~ curl 127.0.0.1
I am proxy apache2 port 8004
?  ~ curl 127.0.0.1
I am proxy apache2 port 8004
?  ~ curl 127.0.0.1
I am proxy apache2 port 8001
?  ~ curl 127.0.0.1
I am proxy apache2 port 8001
?  ~ curl 127.0.0.1
I am proxy apache2 port 8002
... ...

Alic say : ****價(jià)值源于技術(shù),貢獻(xiàn)源于分享****

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容