使用 Nginx 配置負(fù)載均衡

????Nginx 是一款使用非常多的 Web 服務(wù)器,經(jīng)典的 LNMP 中的一份子。當(dāng)然 Apache 也是非常優(yōu)秀的一款服務(wù)器,功能豐富,屬于重量級產(chǎn)品,但是運行時所需的資源更多。而 Nginx 屬于輕量級產(chǎn)品,消耗的資源少,支持高并發(fā),所以在進(jìn)行負(fù)載均衡時多會選擇使用 Nginx 。接下來講一下基礎(chǔ)的負(fù)載均衡的實現(xiàn),我在阿里云上購買了三臺服務(wù)器,使用這三臺服務(wù)器實現(xiàn)負(fù)載均衡。

????首先安裝 Nginx 服務(wù)器,因為我們目前只是配置負(fù)載均衡,所以 Mysql,Php 等軟件可以先不安裝,安裝 Nginx 可以參考我的博文Centos7.4 安裝LNMP環(huán)境進(jìn)行安裝。首先,給這三臺機器分別命令,負(fù)載均衡服務(wù)器為 App,項目服務(wù)器分別為 Server1 和 Server2 進(jìn)行區(qū)分。使用 SSH 登錄到 Server1 和 Server2,配置 Nginx 的默認(rèn)首頁,我使用的是 Centos7.4 發(fā)行版,其他的發(fā)行版可能部分操作不同,但是總體的實現(xiàn)思路是一致的。進(jìn)入 /etc/nginx/conf.d,該目錄下會默認(rèn)存在一個 default.conf 的配置文件,打開進(jìn)行修改:

server {
    listen       80;
    server_name  default;

    location / {
        root   /www;
        index  index.html index.htm index.php;

    }
}

由于我配置的項目運行目錄在 /www 中,所以在根目錄中新建 www 目錄,在 www 目錄中新建 index.html。在里面寫入

<p> there is server1 </p>

重新啟動 Nginx:

$ service nginx restart

使用瀏覽器訪問 Server1 服務(wù)器ip


server1

Server2 進(jìn)行相同的配置,做好標(biāo)識即可。

接下來配置 App 服務(wù)器,也就是負(fù)載均衡服務(wù)器。打開 /etc/nginx/conf.d/default.conf 進(jìn)行編輯,作如下配置:

#配置負(fù)載均衡服務(wù)器,upstream 后面的字符可以自定義
upstream balance {
    # 配置被轉(zhuǎn)發(fā)的服務(wù)器,其中的 ip 推薦使用內(nèi)網(wǎng) ip,可以提高訪問速度,weight 為權(quán)重,數(shù)字越大,權(quán)越高,下面的配置代表請求中三分之一分發(fā)給第一臺服務(wù)器,三分之二的請求分發(fā)給第二臺服務(wù)器。
    server server1_ip weight=1;
    server server2_ip weight=2;
}

server {
    #監(jiān)聽的端口
    listen 80;     
    #域名,如果沒有域名可以使用ip進(jìn)行訪問
    server_name default / 自己的域名;
        
    location / {
        add_header X-Content-Type-Options nosniff;
        proxy_set_header X-scheme $scheme;
    #作用是我們可以獲取到客戶端的真實ip
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_hide_header X-Powered-By;
        proxy_hide_header Vary;
      
            #重點是這里,將代理轉(zhuǎn)發(fā)給上方 upstream 中配置的兩臺服務(wù)器去處理,這里的 http:// 后的值必須和 upstream 后面的值一致
        proxy_pass http://balance;

    }
}

配置完成后保存,重啟 Nginx。使用瀏覽器訪問 App 的 ip 地址,我們通過刷新可以看到不同的文字內(nèi)容。'there is server1' 和 'there is server2',Server2 的內(nèi)容出現(xiàn)的頻率會比 Server1 的多出兩倍。到此,最基礎(chǔ)的負(fù)載均衡就配置完成。

最后,負(fù)載均衡有很多的分發(fā)方式,默認(rèn)為輪訓(xùn)方式,即請求按照配置順序在每個業(yè)務(wù)服務(wù)器中進(jìn)行跳轉(zhuǎn)。還有權(quán)重的方式,上面使用的就是這種方式,請求根據(jù)分配的權(quán)重進(jìn)行分發(fā)處理。還有 ip_hash 方式,每個請求根據(jù) IP 進(jìn)行分發(fā)訪問,后續(xù)的請求也會在同一服務(wù)器上進(jìn)行處理,可以很好的解決 Session 的問題。每種方法都有優(yōu)缺點,需要根據(jù)自己的業(yè)務(wù)場景選擇合適的方式。

文章同步發(fā)布在我的個人博客中,傳送門Hesunfly Blog

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

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

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