首頁 運維 Nginx nginx怎麼設定負載平衡

nginx怎麼設定負載平衡

Jun 21, 2019 am 11:36 AM
nginx 負載平衡

nginx怎麼設定負載平衡

負載平衡是我們大流量網站要做的一個東西,下面我來跟大家介紹在Nginx伺服器上進行負載平衡配置方法,希望對有需要的同學有所幫助哦。

負載平衡

先來簡單了解什麼是負載平衡,單從字面上的意思來理解就可以解釋N台伺服器平均分擔負載,不會因為某台伺服器負載高宕機而某台伺服器閒置的狀況。那麼負載平衡的前提就是要有多台伺服器才能實現,也就是兩台以上。

測試環境
由於沒有伺服器,所以本次測試直接host指定域名,然後在VMware安裝了三台CentOS。

測試網域  :a.com

A伺服器IP :192.168.5.149 (主)

B伺服器IP :192.168.5.27

C伺服器IP :192.168.5.126

#部署想法
A伺服器做為主伺服器,網域直接解析到A伺服器(192.168.5.149)上,由A伺服器負載平衡到B伺服器( 192.168.5.27)與C伺服器(192.168.5.126)上。


網域解析

由於不是真實環境,網域就隨便使用一個a.com當測試,所以a.com的解析只能在hosts文件設定。

開啟:C:WindowsSystem32driversetchosts

在最後加上

192.168.5.149    a.com

儲存退出,然後啟動指令模式ping下看看是否已設定成功

 

從截圖上看已成功將a.com解析到192.168.5.149IP

A伺服器nginx.conf設定
開啟nginx.conf ,檔案位置在nginx安裝目錄的conf目錄下。

在http段加入以下程式碼

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
} 
  
server{ 
    listen 80; 
    server_name a.com; 
    location / { 
        proxy_pass         http://a.com; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}
登入後複製

儲存重啟nginx

B、C伺服器nginx.conf設定
開啟nginx.confi,在http段加入以下程式碼

server{ 
    listen 80; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
登入後複製

保存重啟nginx

測試
當訪問a.com的時候,為了區分是轉向哪台伺服器處理我分別在B、C伺服器下寫一個不同內容的index .html文件,以作區分。

開啟瀏覽器存取a.com結果,刷新會發現所有的請求均分別被主伺服器(192.168.5.149)分配到B伺服器(192.168.5.27)與C伺服器(192.168.5.126)上,實現了負載平衡效果。

 

假如其中一台伺服器宕機會怎樣?
當某台伺服器宕機了,會不會影響存取呢?

我們先來看看實例,根據以上例子,假設C伺服器192.168.5.126這台機子宕機了(由於無法模擬宕機,所以我就把C伺服器關機)然後再來訪問看看。

存取結果:

 

我們發現,雖然C伺服器(192.168.5.126)宕機了,但不影響網站存取。這樣,就不會擔心在負載平衡模式下因為某台機子宕機而拖累整個站點了。

如果b.com也要設定負​​載平衡怎麼辦?
很簡單,跟a.com設定一樣。如下:

假設b.com的主伺服器IP是192.168.5.149,負載平衡到192.168.5.150和192.168.5.151機器上

現在將網域b.com解析到192.168.5.149 IP上。

在主服務器(192.168.5.149)的nginx.conf加入以下代碼:

upstream b.com { 
      server  192.168.5.150:80; 
      server  192.168.5.151:80; 
} 
  
server{ 
    listen 80; 
    server_name b.com; 
    location / { 
        proxy_pass         http://b.com; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}
登入後複製


保存重啟nginx

在192.168.5.150與192.168 .5.151機器上設定nginx,打開nginx.conf在末尾添加以下程式碼:

server{ 
    listen 80; 
    server_name b.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
登入後複製

儲存重啟nginx

完成以後步驟後即可實現b.com的負載平衡配置。

主伺服器不能提供服務嗎?
以上例子中,我們都是應用到了主伺服器負載平衡到其它伺服器上,那麼主伺服器本身能不能也加在伺服器清單中,這樣就不會白白浪費拿一台伺服器純當做轉送功能,而是也參與到提供服務中來。

如上述案例三台伺服器:

A伺服器IP :192.168.5.149 (主)

B伺服器IP :192.168.5.27

C伺服器IP :192.168.5.126

我們把網域名稱解析到A伺服器,然後由A伺服器轉送到B伺服器與C伺服器,那麼A伺服器只做一個轉送功能,現在我們讓A伺服器也提供網站服務。

我們先來分析一下,如果新增主伺服器到upstream中,那麼可能會有以下兩種情況發生:

1、主伺服器轉送到了其它IP上,其它IP伺服器正常處理;

2、主伺服器轉送到了自己IP上,然後又進到主伺服器分配IP那裡,假如一直分配到本機,則會造成一個死循環。

怎麼解決這個問題呢?因為80埠已經用來監聽負載平衡的處理,那麼本伺服器上就不能再使用80埠來處理a.com的存取請求,得用一個新的。於是我們把主伺服器的nginx.conf加入以下一段程式碼:

server{ 
    listen 8080; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}
登入後複製


 
重啟nginx,在瀏覽器輸入a.com:8080試試看能不能存取。結果可以正常訪問

 

既然能正常訪問,那麼我們就可以把主伺服器加入upstream中,但是連接埠要改一下,如下程式碼:

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
      server  127.0.0.1:8080; 
}
登入後複製

由于这里可以添加主服务器IP192.168.5.149或者127.0.0.1均可以,都表示访问自己。

重启Nginx,然后再来访问a.com看看会不会分配到主服务器上。

 

主服务器也能正常加入服务了。

最后
一、负载均衡不是nginx独有,著名鼎鼎的apache也有,但性能可能不如nginx。

二、多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。

 

三、upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。

四、某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。

更多Nginx相关技术文章,请访问Nginx教程栏目进行学习!

以上是nginx怎麼設定負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

怎麼啟動nginx服務器 怎麼啟動nginx服務器 Apr 14, 2025 pm 12:27 PM

啟動 Nginx 服務器需要按照不同操作系統採取不同的步驟:Linux/Unix 系統:安裝 Nginx 軟件包(例如使用 apt-get 或 yum)。使用 systemctl 啟動 Nginx 服務(例如 sudo systemctl start nginx)。 Windows 系統:下載並安裝 Windows 二進製文件。使用 nginx.exe 可執行文件啟動 Nginx(例如 nginx.exe -c conf\nginx.conf)。無論使用哪種操作系統,您都可以通過訪問服務器 IP

See all articles