nginx實現(xiàn)負載均衡與實例解讀
1. 什么是nginx負載均衡
隨著業(yè)務(wù)量的提高,訪問量和數(shù)據(jù)流量的快速增長,其處理能力和計算強度也相應(yīng)地增大,使得單一的服務(wù)器設(shè)備根本無法承擔 。 對服務(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)文章
Nginx安裝后/etc/nginx/conf.d下沒有default.conf的解決
nginx.conf是nginx默認加載的配置文件 通過nginx -V可以看nginx默認配置文件路徑,本文主要介紹了Nginx安裝后/etc/nginx/conf.d下沒有default.conf的解決,感興趣的可以了解一下2023-11-11