1. 程式人生 > 其它 >html標籤屬性(attribute)和dom元素的屬性(property)

html標籤屬性(attribute)和dom元素的屬性(property)

一、引言


1.1 代理問題

客戶端到底要將請求傳送給哪臺伺服器。

1.2 負載均衡問題

如果所有客戶端的請求都發送給了伺服器1,那麼伺服器2將沒有任何意義

1.3 資源優化

客戶端傳送的請求可能是申請動態資源的,也有申請靜態資源,但是都是去Tomcat中獲取的

二、Nginx概述

Nginx的特點:

  • 穩定性極強。 7*24小時不間斷執行。
  • Nginx提供了非常豐富的配置例項。
  • 佔用記憶體小,併發能力強。

三、Nginx的安裝


3.1 安裝Nginx

使用Docker-Compose安裝

version: '3.1'
services:
  nginx:
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: nginx
    ports:
      - 80:80

3.2 Nginx的配置檔案

關於Nginx的核心配置檔案nginx.conf

worker_processes  1;		
error_log  /var/log/nginx/error.log warn;
# 以上統稱為全域性塊, 
# worker_processes他的數值越大,Nginx的併發能力就越強
# error_log 代表Nginx的錯誤日誌存放的位置

events {
    worker_connections  1024;
}
# events塊
# worker_connections他的數值越大,Nignx併發能力越強

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
		# location塊
		# root:將接收到的請求根據/usr/share/nginx/html去查詢靜態資源
		# index: 預設去上述的路徑中找到index.html或者index.htm
    }
	# server塊
	# listen: 代表Nginx監聽的埠號
	# localhost:代表Nginx接收請求的ip
}
# http塊
# include代表引入一個外部的檔案 -> /mime.types中放著大量的媒體型別
# include /etc/nginx/conf.d/*.conf; -> 引入了conf.d目錄下的以.conf為結尾的配置檔案

3.3 修改docker-compose檔案

為了方便修改Nginx配置,修改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

四、Nginx的反向代理【重點


4.1 正向代理和反向代理介紹

正向代理:

  • 正向代理服務是由客戶端設立的。
  • 客戶端了解代理伺服器和目標伺服器都是誰。
  • 幫助咱們實現突破訪問許可權,提高訪問的速度,對目標伺服器隱藏客戶端的ip地址。

反向代理:

  • 反向代理伺服器是配置在服務端的。
  • 客戶端是不知道訪問的到底是哪一臺伺服器。
  • 達到負載均衡,並且可以隱藏伺服器真正的ip地址。

4.2 基於Nginx實現反向代理

準備一個目標伺服器。

啟動了之前的tomcat伺服器。

編寫nginx的配置檔案,通過Nginx訪問到tomcat伺服器。

server{
  listen 80;
  server_name localhost;
    # 基於反向代理訪問到Tomcat伺服器
  location / {
    proxy_pass http://192.168.199.109:8080/;
  }
}

4.3 關於Nginx的location路徑對映

優先順序關係如下:

  • location = /路徑:優先順序最高,精準匹配,一旦匹配, 不再去找其他匹配項。
  • location ^~ /路徑:優先順序次之,字串匹配,一旦匹配, 不再去找其他匹配項。
  • location ~ 正則表示式:如果有多個location的正則能匹配的話,則使用正則表示式最長的那個。
  • location ~* 正則表示式:和location ~ 正則表示式相同,不過當前方式不區分大小寫。
  • location /路徑:常規方式,匹配字首,優先順序最低。

舉個栗子:

# 直接匹配
location = / {
  # 精準匹配,主機名後面不能帶任何的字串
}

# 常規匹配
location /xxx {
  # 匹配所有以/xxx開頭的路徑
}

# 正則匹配
location ~ /xxx {
  # 匹配所有以/xxx開頭的路徑
}

# 匹配開頭路徑
location ^~ /images/ {
  # 匹配所有以/images開頭的路徑,匹配後,不再刪選其他選項
}

# 正則匹配字尾
location ~* \.(gif|jpg|png)$ {
  # 匹配以gif或者jpg或者png為結尾的路徑
}

# 全部通配
location / {
  # 匹配全部路徑  
}

五、Nginx負載均衡【重點


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

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

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

  • ip_hash:基於發起請求的客戶端的ip地址不同,他始終會將請求傳送到指定的伺服器上。

5.1 輪詢

想實現Nginx輪詢負載均衡機制只需要在配置檔案中新增以下內容

upstream 名字 {
  server ip:port;
  server ip:port;
  ...
}
server {
  listen 80;
  server_name localhost;
  
  location / {
    proxy_pass http://upstream的名字/;
  }
}

5.2 權重

實現權重的方式

upstream 名字 {
  server ip:port weight=權重比例;
  server ip:port weight=權重比例;
  ...
}
server {
  listen 80;
  server_name localhost;
  
  location / {
    proxy_pass http://upstream的名字/;
  }
}

5.3 ip_hash

ip_hash實現

upstream 名字 {
  ip_hash;
  server ip:port;
  server ip:port;
  ...
}
server {
  listen 80;
  server_name localhost;
  
  location / {
    proxy_pass http://upstream的名字/;
  }
}
server 47.96.188.147:8080;
  server 192.168.1.145:8080;

六、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靜態資源
# 修改配置檔案

七、Nginx叢集


7.1 叢集結構

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

準備多臺Nginx。

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

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

7.2 搭建Nginx叢集

檢視資料中的內容,直接通過執行docker-compose即可