一、Nginx反向代理
1、什么是反向代理?
代理分為兩類,正向代理和反向代理。
①正向代理:幫助用戶訪問服務器,緩存服務器內容。
②反向代理:代理服務器處理用戶的請求,決定轉發請求給誰處理負載均衡的作用。
2、實現反向代理實驗
nginx可以代理七層跟四層,代理七層代理比四層看到的東西功能強大,可以看到真實數據。
使用模塊:proxy_pass 反向代理的服務器地址或域名;
①實驗拓撲
②實驗目的:
由pc2代理服務器,代理服務端pc3處理用戶pc1的請求
③實驗過程
①首先準備三臺虛擬機且關閉防火墻和selinux,其中pc2和pc3安裝nginx。
pc2、pc3執行:
yum install epel-release -y
yum install nginx -y
#安裝nginx
②pc2和pc3上創建子配置文件test.conf
pc2、pc3執行:
cd /etc/nginx/conf.d/
touch test.conf
#進入子配置文件目錄創建子配置文件
③服務端pc3子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
④創建服務端pc3虛擬主機的根目錄,并寫默認內容為this is pc3在index.html中
mkdir -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#遞歸創建文件夾并設置默認主頁內容
⑤反向代理服務器pc2的配置文件內容:
server {listen 80;
#監聽所有80端口server_name www.lhj.com;
#創建虛擬主機www.lhj.com
location /{
proxy_pass http://192.168.30.13
#訪問反代的虛擬主機www.lhj.com則由192.168.30.13處理請求
}
}
⑥代理服務和服務端開啟nginx服務,并在pc1客戶端添加www.lhj.com的對應hosts文件進行測試
pc2、pc3執行:
systemctl start nginx
pc1執行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com內容
curl www.lhj.com
#訪問反向代理服務器
得到內容
this is pc3
二、反向代理負載均衡
nginx反向代理負載均衡中用的是upstream模塊,應用于http模塊中,目的為所有server模塊提供服務,默認算法為輪詢。
使用格式
upstream name(反向代理名稱){
}
其他配置:①max_conns=數字;設置最大活動連接數,默認為0表示無限制
②max_fails=數字;后端服務器下載條件,對本次調度選擇的后端服務器進行連續檢查,如果都失敗標記不可用,默認1次。
③fail_timeout=time;后的服務器上行時間,壞掉后修復需要檢查多久才能上線使用,默認檢查10s。
④backup 設置為備份服務器,所有服務器不可用時使用此服務,注意不能指定自己;
⑤down 指定此服務器down狀態,無論本身是什么狀態;
1、反向代理負載均衡調度算法
①輪詢算法
默認算法是輪詢算法即反向代理服務器處理用戶請求時,每個后端服務器都輪流給。
upstream lhj{ server http://192.168.170.111;
? ? ? ? ? ? ? ? ? ? ? ?server http://192.168.170.114
}
②加權輪詢算法
在默認輪詢的基礎上增加權重,weight=number。如果后端有2個服務器其中一個配置權重為weight=3另外一個不配置默認是1,則有用戶訪問時分配給給有權重的服務器和不配置權重的服務器的比例為3:1。
upstream lhj{ server http://192.168.170.111? ? ? weight=3;
? ? ? ? ? ? ? ? ? ? ? server? http://192.168.170.114;
}
③最小連接算法
按照nginx反向代理服務器和后端服務器的連接數分配請求,連接越少的分配處理請求優先級越高。例如若最小連接數(least_conn;)是設置是3,后端服務器1有2個請求在處理,而后端服務器2只有一個請求在處理則新請求交給后端服務器2。
upstream lhj{ least_conn;
? ? ? ? ? ? ? ? ? ? ? server? ?htttp://192.168.170.111;
? ? ? ? ? ? ? ? ? ? ? server http://192.168.170.114;
}
④ip url哈希算法
每個請求按訪問ip或者url的hash結果分配,這樣每個訪客固定訪問一個后端服務器,不需要知道是如何計算的,只要了解會固定訪問一個后端服務器即可。
⑤響應時間fair算法
需要解讀nginx第三方模塊ngx_http_upstream_fair_module實現,配置時max_fails=number為后端服務器配置,默認單位為秒,按照響應時間來處理請求,響應時間越短越優先分配。
2、實現反向代理負載均衡實驗
使用變量:$remote_root
①實驗拓撲
②實驗目的
用戶pc1訪問代理服務的www.lhj.com虛擬主機域名時,若由服務端pc3服務器處理則返回this is pc3若由服務器pc4服務器處理則返回this is pc4用nginx反向代理實現負載均衡。
③實驗過程
①首先準備四臺虛擬機且關閉防火墻和selinux,其中pc2、pc3、pc4安裝nginx。
pc2、pc3、pc4執行:
yum install epel-release -y
yum install nginx -y
#安裝nginx
②pc2、pc3、pc4上創建子配置文件test.conf
pc2、pc3、pc4執行:
cd /etc/nginx/conf.d/
touch test.conf
#進入子配置文件目錄創建子配置文件
③服務端pc3子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
④創建服務端pc3虛擬主機的根目錄,并寫默認內容為this is pc3在index.html中
mkdir -p /etc/nginx/html;
echo "this is pc3">/etc/nginx/html/index.html
#遞歸創建文件夾并設置默認主頁內容
⑤服務端pc4子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
⑥服務端pc4子配置文件內容
server {root /etc/nginx/html;
#指定虛擬主機根目錄
}
⑦創建服務端pc4虛擬主機的根目錄,并寫默認內容為this is pc4在index.html中
mkdir -p /etc/nginx/html;
echo "this is pc4">/etc/nginx/html/index.html
⑧反向代理服務器pc2的主配置文件和子配置文件修改:
主配置文件內容修改:
vim /etc/nginx/nginx.conf
#打開主配置文件,在主配置文件的http模塊中添加內容如下:
upstream lhj {
#創建名字為lhj的方向代理負載均衡server 192.168.30.13;
#服務端pc3地址server 192.168.30.14;
#服務端pc4地址
}
#子配置文件test.conf內容:
server {listen 80;
#監聽所有80端口server_name www.lhj.com;
#創建虛擬主機www.lhj.com
location /{
proxy_pass http://lhj;
#訪問反代的虛擬主機www.lhj.com則由反向代理負載均衡lhj來處理請求
}
}
⑨代理服務和服務端開啟nginx服務,并在pc1客戶端添加www.lhj.com的對應hosts文件進行測試
pc2、pc3、pc4執行:
systemctl start nginx
pc1執行:
sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts
#在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com內容
curl www.lhj.com
#多次使用訪問反向代理服務器
得到內容
this is pc3
this is pc4的比例大概為1:1