java基礎-day69-Nginx02

五、Nginx負載均衡【重點


Nginx為我們默認提供了三種負載均衡的策略:

輪詢:將客戶端發起的請求,平均的分配給每一臺服務器。

權重:會將客戶端的請求,根據服務器的權重值不同,分配不同的數量。

ip_hash:基于當前發起請求的客戶端的ip地址,如果ip地址不變,始終會將請求發送到當前的服務器上。

image.png

5.1 輪詢

想實現Nginx輪詢負載均衡機制只需要在default.conf配置文件中添加以下內容

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 權重

實現權重的方式

upstream 名字 {
  server ip:port weight=權重比例;
  server ip:port weight=權重比例;
  ...
}
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實現,只需要添加一個 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動靜分離【重點


Nginx的并發能力公式:

worker_processes * worker_connections / 4 | 2 = Nginx最終的并發能力

動態資源需要/4,靜態資源需要/2.

Nginx通過動靜分離,來提升Nginx的并發能力,更快的給用戶響應。

6.1 動態資源代理

使用proxy_pass動態代理

# 配置如下
location / {
  proxy_pass 路徑;
}

6.2 靜態資源代理

使用root靜態代理

# 配置如下
location / {
  root 靜態資源路徑;
  index 默認訪問路徑下的什么資源;
  autoindex on; # 代表展示靜態資源全的全部內容,以列表的形式展開。
}

# 先修改docker,添加一個數據卷,映射到Nginx服務器的一個目錄
# 添加了index.html和1.jpg靜態資源
# 修改配置文件
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# ls
conf.d  docker-compose.yml
[root@iz8vbdmrir2n6xqzrbd93hz docker_nginx]# vim docker-compose.yml 

修改docker-compose.yml為如下內容:

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

重啟再查看,目錄已經創建

[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 目錄中拷貝對應的 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的靜態資源
  location /html {
    root /data;   #由于location后面寫的是/html,所以root后的路徑就不用寫成/data/html,/html會默認放在/data后面
    index student.html;
  }

  # 代理到img的靜態資源
  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

瀏覽器分別訪問以下地址進行測試:

  http://39.98.132.196/html/ (查看之前拷貝的student.html頁面)

  http://39.98.132.196/img/2.jpg (注:2.jpg是拷貝的圖片名稱)

  http://39.98.132.196/img/ (注:可以看到當前目錄下的所有文件)

七、Nginx集群


單點故障,避免nginx的宕機,導致整個程序的崩潰

準備多臺Nginx。

準備keepalived,監聽nginx的健康情況。

準備haproxy,提供一個虛擬的路徑,統一的去接收用戶得請求。

Nginx集群
image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、Nginx介紹 1.1引言 為什么要學習 Nginx問題1:客戶端到底要將請求發送給哪臺服務器問題2:如果所有...
    yjtuuige閱讀 1,287評論 1 25
  • 1 nginx介紹 nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3...
    煩遠遠閱讀 877評論 0 0
  • 當讓內網用戶通過一個有外網地址的網關訪問互聯網時,內網主機的網關都指向其中有外網的主機的內網地址,一般在網關處添加...
    SRE1閱讀 1,573評論 1 3
  • Nginx安裝 docker-compose.yml 配置文件 nginx 目錄下 nginx.conf ngin...
    黑人毅的粉絲閱讀 269評論 0 0
  • Nginx負載均衡 1、負載均衡的作用 如果你的nginx服務器給2臺web服務器做代理,負載均衡算法采用輪詢,那...
    漫步云端vv閱讀 563評論 0 1