????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

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