五、Nginx負(fù)載均衡【重點(diǎn)】
Nginx為我們默認(rèn)提供了三種負(fù)載均衡的策略:
輪詢:將客戶端發(fā)起的請求,平均的分配給每一臺服務(wù)器。
權(quán)重:會將客戶端的請求,根據(jù)服務(wù)器的權(quán)重值不同,分配不同的數(shù)量。
ip_hash:基于當(dāng)前發(fā)起請求的客戶端的ip地址,如果ip地址不變,始終會將請求發(fā)送到當(dāng)前的服務(wù)器上。

5.1 輪詢
想實現(xiàn)Nginx輪詢負(fù)載均衡機(jī)制只需要在default.conf配置文件中添加以下內(nèi)容
upstream 名字 {
server ip:port;
server ip:port;
...
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:(注意:upstream的名字不要使用下劃線)
upstream my-server {
server 39.98.132.196:8080;
server 39.98.132.196:8081;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat docker_nginx docker_ssm yangl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_ssm/
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# ls
docker-compose Dockerfile video-web.war
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# cd docker-compose/
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# ls
docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# docker-compose-Linux-x86_64 up -d
Starting video-ssm ... done
[root@iz8vbdmrir2n6xqzrbd93hz docker-compose]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_ssm]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_nginx/
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
5.2 權(quán)重
實現(xiàn)權(quán)重的方式
upstream 名字 {
server ip:port weight=權(quán)重比例;
server ip:port weight=權(quán)重比例;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
例如:
upstream my-server {
server 39.98.132.196:8080 weight=5;
server 39.98.132.196:8081 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://my-server/;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
5.3 ip_hash
ip_hash實現(xiàn),只需要添加一個 ip_hash 配置即可
upstream 名字 {
ip_hash; # 配置ip_hash
server ip:port;
server ip:port;
...
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://upstream的名字/;
}
}
六、Nginx動靜分離【重點(diǎn)】
Nginx的并發(fā)能力公式:
worker_processes * worker_connections / 4 | 2 = Nginx最終的并發(fā)能力
動態(tài)資源需要/4,靜態(tài)資源需要/2.
Nginx通過動靜分離,來提升Nginx的并發(fā)能力,更快的給用戶響應(yīng)。
6.1 動態(tài)資源代理
使用proxy_pass動態(tài)代理
# 配置如下
location / {
proxy_pass 路徑;
}
6.2 靜態(tài)資源代理
使用root靜態(tài)代理
# 配置如下
location / {
root 靜態(tài)資源路徑;
index 默認(rèn)訪問路徑下的什么資源;
autoindex on; # 代表展示靜態(tài)資源全的全部內(nèi)容,以列表的形式展開。
}
# 先修改docker,添加一個數(shù)據(jù)卷,映射到Nginx服務(wù)器的一個目錄
# 添加了index.html和1.jpg靜態(tài)資源
# 修改配置文件
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# vim docker-compose.yml
修改docker-compose.yml為如下內(nèi)容:
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
- /opt/docker_nginx/img/:/data/img
- /opt/docker_nginx/html/:/data/html
重啟再查看,目錄已經(jīng)創(chuàng)建
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 down
Stopping nginx ... done
Removing nginx ... done
Removing network docker_nginx_default
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 up -d
Creating network "docker_nginx_default" with the default driver
Creating nginx ... done
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d docker-compose.yml html img
分別在 html 以及 img 目錄中拷貝對應(yīng)的 html 頁面和圖片即可,然后修改 Nginx 的 default.conf 配置文件
upstream my-server {
server 39.98.132.196:8080 weight=5;
server 39.98.132.196:8081 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
# 代理到html的靜態(tài)資源
location /html {
root /data; #由于location后面寫的是/html,所以root后的路徑就不用寫成/data/html,/html會默認(rèn)放在/data后面
index student.html;
}
# 代理到img的靜態(tài)資源
location /img {
root /data;
autoindex on;
}
}
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# cd conf.d/
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# ls
default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# vim default.conf
[root@iz8vbdmrir2n6xqzrbd93hz conf.d]# cd ..
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# docker-compose-Linux-x86_64 restart
Restarting nginx ... done
瀏覽器分別訪問以下地址進(jìn)行測試:
http://39.98.132.196/html/ (查看之前拷貝的student.html頁面) http://39.98.132.196/img/2.jpg (注:2.jpg是拷貝的圖片名稱) http://39.98.132.196/img/ (注:可以看到當(dāng)前目錄下的所有文件)
七、Nginx集群
單點(diǎn)故障,避免nginx的宕機(jī),導(dǎo)致整個程序的崩潰
準(zhǔn)備多臺Nginx。
準(zhǔn)備keepalived,監(jiān)聽nginx的健康情況。
準(zhǔn)備haproxy,提供一個虛擬的路徑,統(tǒng)一的去接收用戶得請求。
| Nginx集群 |
|---|
![]() image.png
|
