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

3. 實戰(zhàn)配置nginx負載均衡
負載均衡有多種算法:
- 1.源地址哈希法
- 2.輪詢法
- 3.隨機法
- 4.加權輪詢法
- 5.最小連接數法 具體算法的意思網上一大把
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; //獲取轉發(fā) 客戶端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect default;
}
}這段是nginx調度服務器上 nginx.conf里的設置
nginx的負載均衡主要就是以上代碼。 它放在http區(qū)塊里
test-server 是自定義的命名,可以自己自定。
意思是:
1. 當用戶訪問 www.test.com時 , 該訪問會根據權重 隨機分配到47.106.98.90 或 47.93.240.141 中,端口指定80
2. 這里用了權重的算法
3.3 演示
重啟nginx,第一次訪問http://www.test.com如圖所示

- 第一次

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

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

4.2 負載均衡的服務器內容如何保持內容一致
① ==圖片問題==
可以單獨建立圖片服務器 或 7牛云的 圖片服務器 ,就是對象存儲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; //獲取轉發(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)
域名設置方面把 域名解析到 47.100.100.100 .
6. 配置轉發(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;
}
}轉發(fā) https ,需要證書 ,劃下重點
ssl_certificate /usr/local/wap.pem; ssl_certificate_key /usr/local/wap.key;
7. 國內網址反向代理到國外https網址
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 '';
}
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用Bash腳本和Logrotate實現Nginx日志切割的方法
Logrotate是一個Linux系統上用來管理日志文件的工具,它可以定期輪轉日志文件、壓縮舊的日志文件以及刪除過期的日志文件,這篇文章主要介紹了使用Bash腳本和Logrotate實現Nginx日志切割,需要的朋友可以參考下2024-05-05
詳解Nginx反向代理實現會話(session)保持的兩種方式
這篇文章主要介紹了詳解Nginx反向代理實現會話(session)保持的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

