柚子快報(bào)激活碼778899分享:Nginx代理及負(fù)載均衡
柚子快報(bào)激活碼778899分享:Nginx代理及負(fù)載均衡
目錄
一、Nginx正向代理(客戶端 <一> 代理 一>服務(wù)端)
二、Nginx反向代理(客戶端 一>代理 <一> 服務(wù)端)
反向代理實(shí)例:
1、修改代理服務(wù)器配置設(shè)置請(qǐng)求轉(zhuǎn)發(fā)。
2、啟動(dòng)nginx代理服務(wù)器
3、驗(yàn)證
三、基于反向代理實(shí)現(xiàn)的負(fù)載均衡
1、利用nginx負(fù)載均衡后端服務(wù)器配置塊upstream 組成服務(wù)集群
2、通過(guò)客戶端向負(fù)載均衡服務(wù)器發(fā)送請(qǐng)求,模擬并發(fā)環(huán)境
3、驗(yàn)證
一、Nginx正向代理(客戶端 <一> 代理 一>服務(wù)端)
????????正向代理是代理服務(wù)器位于客戶端和目標(biāo)服務(wù)器之間,客戶端發(fā)送請(qǐng)求時(shí)需先將請(qǐng)求發(fā)送至代理服務(wù)器,代理服務(wù)器再將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,并將響應(yīng)返回給客戶端。這種配置可以用于代理客戶端訪問(wèn)受限制的內(nèi)容或保護(hù)客戶端的身份信息。(服務(wù)端不知道客戶端的真實(shí)IP,都是通過(guò)代理服務(wù)器轉(zhuǎn)發(fā)的請(qǐng)求和響應(yīng))
正向代理,對(duì)于服務(wù)端來(lái)講,來(lái)源地址是一個(gè)整體(代理服務(wù)器)
二、Nginx反向代理(客戶端 一>代理 <一> 服務(wù)端)
? ? ? ? 當(dāng)外部請(qǐng)求進(jìn)入系統(tǒng)時(shí),K代理服務(wù)器把該請(qǐng)求轉(zhuǎn)發(fā)到系統(tǒng)中的某臺(tái)服務(wù)器上,對(duì)外部請(qǐng)求來(lái)說(shuō),與之交互的只有代理服務(wù)器,此時(shí)代理服務(wù)器實(shí)現(xiàn)的是反向代理。
????????其實(shí)客戶端對(duì)代理是無(wú)感知的,因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問(wèn),我們只需要將請(qǐng)求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標(biāo)服務(wù)器獲取數(shù)據(jù)后,再返回給客戶端,此時(shí)反向代理服務(wù)器和目標(biāo)服務(wù)器對(duì)外就是一個(gè)服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真實(shí)服務(wù)器IP地址。(客戶端不知道服務(wù)端的真實(shí)IP)
反向代理,對(duì)于客戶端來(lái)講,后端地址是一個(gè)整體(代理服務(wù)器)
正向代理和反向代理的區(qū)別:
1、正向代理是為了代理客戶端發(fā)送請(qǐng)求,而反向代理是為了代理服務(wù)器接收請(qǐng)求。
2、正向代理的主體是客戶端,而反向代理的主體是服務(wù)器
反向代理實(shí)例:
目的:在客戶端無(wú)法直接連接目標(biāo)服務(wù)器的情況下,通過(guò)客戶端向代理服務(wù)器發(fā)送請(qǐng)求并轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器接收到響應(yīng)結(jié)果
目標(biāo)服務(wù)器:
A:127.0.0.1:8000/API
代理服務(wù)器:
B:127.0.0.2:8889
客戶端:
C:127.0.0.3
1、修改代理服務(wù)器配置設(shè)置請(qǐng)求轉(zhuǎn)發(fā)。
默認(rèn)配置文件路徑一般在/etc/nginx/conf.d/default.conf,特例情況下通過(guò)開源社區(qū)拉取的項(xiàng)目可根據(jù)/etc/nginx/nginx.conf全局配置文件中的include查看配置文件
nginx.conf?
user ?nginx;
worker_processes ?auto;
error_log ?/var/log/nginx/error.log notice;
pid ???????/var/run/nginx.pid;
events {
????worker_connections ?1024;
}
http {
????include ??????/etc/nginx/mime.types;
????default_type ?application/octet-stream;
????log_format ?main ?'$remote_addr - $remote_user [$time_local] "$request" '
??????????????????????'$status $body_bytes_sent "$http_referer" '
??????????????????????'"$http_user_agent" "$http_x_forwarded_for"';
????access_log ?/var/log/nginx/access.log ?main;
????sendfile ???????on;
????#tcp_nopush ????on;
????keepalive_timeout ?65;
????#gzip ?on;
????include /etc/nginx/conf.d/*.conf;
}
配置項(xiàng) 解釋 備注 server 定義虛擬主機(jī)的配置項(xiàng),一個(gè)Nginx服務(wù)器可以有多個(gè)server塊來(lái)處理不同的域名或IP地址的請(qǐng)求 listen 8080 監(jiān)聽8080端口 listen [::]:8080 設(shè)置服務(wù)器監(jiān)聽的IPv6地址和端口 server_name 設(shè)置虛擬主機(jī)的域名或IP地址 location 匹配請(qǐng)求的URL路徑,并指定相應(yīng)的配置塊 proxy_pass 用于將請(qǐng)求反向代理到指定的后端服務(wù)器 proxy_set_header 用于設(shè)置轉(zhuǎn)發(fā)到后端服務(wù)器的HTTP請(qǐng)求頭 可設(shè)置是否將客戶端IP地址寫入請(qǐng)求頭,從而實(shí)現(xiàn)隱藏真實(shí)客戶端IP server?backend1.example.com; 默認(rèn)的負(fù)載均衡策略。Nginx按照請(qǐng)求的順序?qū)⒄?qǐng)求分發(fā)給后端服務(wù)器,每個(gè)服務(wù)器依次接收請(qǐng)求 ip_hash; Nginx根據(jù)客戶端的IP地址將請(qǐng)求分發(fā)給后端服務(wù)器。這樣可以確保同一個(gè)客戶端的請(qǐng)求始終發(fā)送到同一個(gè)服務(wù)器,有助于保持會(huì)話的一致性 least_conn; Nginx將請(qǐng)求發(fā)送到當(dāng)前連接數(shù)最少的后端服務(wù)器。這個(gè)策略可以確保負(fù)載均衡,使得連接數(shù)相對(duì)均勻地分布在后端服務(wù)器上 server?backend1.example.com?weight=3; Nginx根據(jù)服務(wù)器的權(quán)重分配請(qǐng)求。權(quán)重越高的服務(wù)器將接收到更多的請(qǐng)求 server?backend1.example.com?weight=3; least_conn; Nginx根據(jù)服務(wù)器的權(quán)重和當(dāng)前連接數(shù)將請(qǐng)求分發(fā)給后端服務(wù)器。權(quán)重越高且連接數(shù)越少的服務(wù)器將接收到更多的請(qǐng)求
2、啟動(dòng)nginx代理服務(wù)器
docker-compose.yml?
version: '2.0'
services:
??web: #入口程序
????image: nginx:1.20.1
????container_name: nginx
????ports:
?????- "8889:8080"
????volumes:
?????- /home/nginx/nginx.conf:/etc/nginx/nginx.conf
?????- /home/nginx/default.conf:/etc/nginx/conf.d/default.conf
????ulimits:
??????core: 0
3、驗(yàn)證
客戶端請(qǐng)求:
curl http://127.0.0.2:8889/API
Request received. Check server console for client IP.
服務(wù)端響應(yīng):
Client IP:127.0.0.2
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
三、基于反向代理實(shí)現(xiàn)的負(fù)載均衡
? ? ? ?將網(wǎng)絡(luò)流量在多個(gè)后端服務(wù)器之間分配的技術(shù),以提高系統(tǒng)的可伸縮性、可靠性和性能
例:比如共有15個(gè)請(qǐng)求,通過(guò)nginx將這些請(qǐng)求平均分發(fā)(理想狀態(tài)下)到下面三個(gè)服務(wù)器上,每個(gè)服務(wù)器上有5個(gè)請(qǐng)求
服務(wù)端:
A:127.0.0.1:8000
B:127.0.0.1:8001
C:127.0.0.1:8002
客戶端:
D:127.0.0.3
負(fù)載均衡服務(wù)器:
E:127.0.0.2:8889
具體實(shí)現(xiàn):
1、利用nginx負(fù)載均衡后端服務(wù)器配置塊upstream 組成服務(wù)集群
nginx代理配置?
upstream test_api {
???????????server 127.0.0.1:8000;
???????????server 127.0.0.1:8001;
???????????server 127.0.0.1:8002;
}
server {
????listen ??????8080;
????listen ?[::]:8080;
????server_name ?localhost;
????# access_log ?/var/log/nginx/host.access.log ?main;
????location / {
????????proxy_pass http://test_api;
????????proxy_set_header Host $host;
????????#proxy_set_header X-Real-IP $remote_addr;
????}
????error_page ??500 502 503 504 ?/50x.html;
????location = /50x.html {
????????root ??/usr/share/nginx/html;
????}
}
2、通過(guò)客戶端向負(fù)載均衡服務(wù)器發(fā)送請(qǐng)求,模擬并發(fā)環(huán)境
bash request.sh?
#!/bin/bash
TARGET_SERVER="http://127.0.0.2:8889/API"
CONCURRENT_REQUESTS=15
for ((i=1; i<=CONCURRENT_REQUESTS; i++)); do
????curl -s "$TARGET_SERVER" >/dev/null &
done
wait
echo "All requests sent"
3、驗(yàn)證
A服務(wù)端:127.0.0.1:8000
Client IP:127.0.0.1
Client IP:127.0.0.1
Client IP:127.0.0.1
Client IP:127.0.0.1
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
Client IP:127.0.0.1
B服務(wù)端:127.0.0.1:8001
Client IP:127.0.0.1
Client IP:127.0.0.1
Client IP:127.0.0.1
Client IP:127.0.0.1
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
Client IP:127.0.0.1
C服務(wù)端:127.0.0.1:8002
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
Client IP:127.0.0.1
Client IP:127.0.0.1
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
127.0.0.2 -? ?-? [11/Aug2023 10:58:33]? "GET? /API HTTP/1.0"? 200 -
Client IP:127.0.0.1
Client IP:127.0.0.1
Client IP:127.0.0.1
柚子快報(bào)激活碼778899分享:Nginx代理及負(fù)載均衡
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。