nginx實現(xiàn)負載均衡與實例解讀
1. 什么是nginx負載均衡
隨著業(yè)務(wù)量的提高,訪問量和數(shù)據(jù)流量的快速增長,其處理能力和計算強度也相應(yīng)地增大,使得單一的服務(wù)器設(shè)備根本無法承擔(dān) 。 對服務(wù)器升級費用十分高昂(F5、Radware),甚至性能再卓越的設(shè)備也不能滿足當前業(yè)務(wù)量增長的需求。
針對此情況而衍生出來的一種廉價有效透明的方法以擴展現(xiàn)有網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性的技術(shù)就是負載均衡(Load Balance)。
nginx負載均衡就是一種是通過軟件來進行解決的,基于Linux系統(tǒng)并且開源的負載均衡策略.
2. 一般中型網(wǎng)站架構(gòu)圖

3. 實戰(zhàn)配置nginx負載均衡
負載均衡有多種算法:
- 1.源地址哈希法
- 2.輪詢法
- 3.隨機法
- 4.加權(quán)輪詢法
- 5.最小連接數(shù)法 具體算法的意思網(wǎng)上一大把
3.1 負載均衡拓撲

3.2 如何配置
upstream test-server{
server 47.106.98.90:80 weight=1;
server 47.93.240.141:80 weight=2;
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://test-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; //獲取轉(zhuǎn)發(fā) 客戶端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect default;
}
}這段是nginx調(diào)度服務(wù)器上 nginx.conf里的設(shè)置
nginx的負載均衡主要就是以上代碼。 它放在http區(qū)塊里
test-server 是自定義的命名,可以自己自定。
意思是:
1. 當用戶訪問 www.test.com時 , 該訪問會根據(jù)權(quán)重 隨機分配到47.106.98.90 或 47.93.240.141 中,端口指定80
2. 這里用了權(quán)重的算法
3.3 演示
重啟nginx,第一次訪問http://www.test.com如圖所示

- 第一次

- 第二次
在我們10次的刷新訪問中,有3次是跳轉(zhuǎn)到90這個服務(wù)器中,基本符合權(quán)重的算法
4. 負載均衡的服務(wù)器如何保持內(nèi)容一致
4.1 那么如果其中一個服務(wù)器掛了,會怎樣呢?
我們把2號服務(wù)器(47.93.240.141)停掉

我們刷新下頁面 ,可以看到無論怎么刷新 , 都是只有1號服務(wù)器

4.2 負載均衡的服務(wù)器內(nèi)容如何保持內(nèi)容一致
① ==圖片問題==
可以單獨建立圖片服務(wù)器 或 7牛云的 圖片服務(wù)器 ,就是對象存儲OSS
5. 同樣的,負載均衡也可以是作為堡壘機
upstream test-server{
server 47.106.98.99:80 weight=1;
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://test-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; //獲取轉(zhuǎn)發(fā) 客戶端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect default;
}
}這樣就能保護 47.106.98.99 的真實ip 不暴露 , 真正暴露的是這個堡壘機的ip 。 (比如 47.100.100.100)
域名設(shè)置方面把 域名解析到 47.100.100.100 .
6. 配置轉(zhuǎn)發(fā) https
server {
listen 443 ssl;
server_name www.test.com;
ssl_certificate /usr/local/wap.pem;
ssl_certificate_key /usr/local/wap.key;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
limit_req zone=mylimit burst=50 nodelay;
proxy_pass https://192.168.1.62;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect default;
}
}轉(zhuǎn)發(fā) https ,需要證書 ,劃下重點
ssl_certificate /usr/local/wap.pem; ssl_certificate_key /usr/local/wap.key;
7. 國內(nèi)網(wǎng)址反向代理到國外https網(wǎng)址
server {
listen 80;
server_name ai.abc.com;
location / {
proxy_ssl_server_name on;
proxy_ssl_name api.openai.com;
proxy_ssl_verify off;
proxy_pass https://api.openai.com;
proxy_set_header Host api.openai.com;
proxy_set_header Accept-Encoding '';
}
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Bash腳本和Logrotate實現(xiàn)Nginx日志切割的方法
Logrotate是一個Linux系統(tǒng)上用來管理日志文件的工具,它可以定期輪轉(zhuǎn)日志文件、壓縮舊的日志文件以及刪除過期的日志文件,這篇文章主要介紹了使用Bash腳本和Logrotate實現(xiàn)Nginx日志切割,需要的朋友可以參考下2024-05-05
nginx實現(xiàn)發(fā)布靜態(tài)資源的方法
這篇文章主要介紹了nginx實現(xiàn)發(fā)布靜態(tài)資源的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
通過Nginx配置實現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)數(shù)據(jù)庫的操作指南
項目開發(fā)部署中經(jīng)常會遇到MySQL或Oracle數(shù)據(jù)庫安裝在內(nèi)網(wǎng),而我們的應(yīng)用服務(wù)只能部署在外網(wǎng),如果實現(xiàn)外網(wǎng)服務(wù)訪問連接內(nèi)網(wǎng)的數(shù)據(jù)庫呢?本次介紹如何通過Nginx配置實現(xiàn)外網(wǎng)訪問內(nèi)網(wǎng)數(shù)據(jù)庫,需要的朋友可以參考下2023-10-10
詳解Nginx反向代理實現(xiàn)會話(session)保持的兩種方式
這篇文章主要介紹了詳解Nginx反向代理實現(xiàn)會話(session)保持的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

