10 nginx之反向代理 、負載均衡
一、反向代理
1、什麼是代理
代理一詞往往並不陌生, 該服務我們常常用到如(代理理財、代理租房、代理收貨等等)
正向代理:客戶端去找服務端
反向代理:代理去找服務端
1.區別在於形式上服務的”物件”不一樣
2.正向代理代理的物件是客戶端,為客戶端服務
3.反向代理代理的物件是服務端,為服務端服務
2、Nginx代理服務常見模式
Nginx作為代理服務,按照應用場景模式進行總結,代理分為
1.正向代理
2.反向代理
3、正向代理
正向代理:客戶端去找服務端
4、反向代理
反向代理:代理去找服務端
格式:
upstream [連結池名稱] { server [ip]:[埠] [分發策略]; }
1、添加發往後端伺服器的請求頭資訊
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $http_host;
proxy_set_header Connection close;
Context: http, server, location
# 使用者請求的時候HOST的值是game.test.com, 那麼代理服務會像後端傳遞請求的還是game.test.com
proxy_set_header Host $http_host;
# 將$remote_addr的值放進變數X-Real-IP中,$remote_addr的值為客戶端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客戶端通過代理服務訪問後端服務, 後端服務通過該變數會記錄真實客戶端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
lb01:
web02:
windows:
配置:
lb01:
web02:
現在正常了:
2、代理到後端的TCP連線、響應、返回等超時時間
1.nginx代理與後端伺服器連線超時時間(代理連線超時)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
2.nginx代理等待後端伺服器的響應時間
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
3.後端伺服器資料回傳給nginx代理超時時間
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
3、proxy_buffer代理緩衝區
1.nignx會把後端返回的內容先放到緩衝區當中,然後再返回給客戶端,邊收邊傳, 不是全部接收完再傳給客戶端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
2.設定nginx代理儲存使用者頭資訊的緩衝區大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
3.proxy_buffers 緩衝區
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
4.
[root@lb01 conf.d]# cd /etc/nginx
[root@lb01 nginx]# vim proxy_params
[root@lb01 conf.d]#cat /etc/nginx/proxy_params
# 使用者請求的時候HOST的值是game.test.com, 那麼代理服務會像後端傳遞請求的還是game.test.com
proxy_set_header Host $http_host;
# 將$remote_addr的值放進變數X-Real-IP中,$remote_addr的值為客戶端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客戶端通過代理服務訪問後端服務, 後端服務通過該變數會記錄真實客戶端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx代理與後端伺服器連線超時時間(代理連線超時)
proxy_connect_timeout 10s;
# nginx代理等待後端伺服器的響應時間
proxy_read_timeout 10s;
# 後端伺服器資料回傳給nginx代理超時時間
proxy_send_timeout 10s;
# nignx會把後端返回的內容先放到緩衝區當中,然後再返回給客戶端,邊收邊傳, 不是全部接收完再傳給客戶
proxy_buffering on;
# 設定nginx代理儲存使用者頭資訊的緩衝區大小
proxy_buffer_size 8k;
# proxy_buffers 緩衝區(緩衝真正的資料)
proxy_buffers 8 8k;
# 狀態標記
proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403 http_429;
5.
[root@lb01 nginx]# cat /etc/nginx/conf.d/game.conf
upstream game {
server 172.16.1.8:80;
# server 172.16.1.7:80;
}
server{
server_name game.test.com;
listen 80;
location / {
proxy_pass http://game;
include proxy_params;
}
}
二、負載均衡
1、什麼是負載均衡
1、平均分配
2、權重大小分配
通過反向代理實現多臺web伺服器共同工作。
負載均衡是由反向代理來實現的。
負載均衡就是將流量按照一定的方式分配給web機器
選擇使用Nginx來搭建負載均衡伺服器
2、四層負載均衡
四層負載均衡是基於TCP/IP協議的
所謂四層負載均衡指的是OSI七層模型中的傳輸層,那麼傳輸層Nginx已經能支援TCP/IP的控制,
所以只需要對客戶端的請求進行TCP/IP協議的包轉發就可以實現負載均衡,
那麼它的好處是效能非常快、只需要底層進行應用處理,而不需要進行一些複雜的邏輯
3、七層負載均衡
七層負載均衡是基於HTTP協議的
七層負載均衡它是在應用層,那麼它可以完成很多應用方面的協議請求,
比如我們說的http應用的負載均衡,
它可以實現http資訊的改寫、頭資訊的改寫、安全應用規則控制、URL匹配規則控制、以及轉發、rewrite等等
的規則,所以在應用層的服務裡面,我們可以做的內容就更多,那麼Nginx則是一個典型的七層負載均衡SLB
4、四層和七層負載均衡的區別
四層負載均衡資料包在底層就進行了分發,而七層負載均衡資料包則是在最頂層進行分發、由此可以看出,
七層負載均衡效率沒有四負載均衡高。
但七層負載均衡更貼近於服務,如:http協議就是七層協議,我們可以用Nginx可以作會話保持,
URL路徑規則匹配、head頭改寫等等,這些是四層負載均衡無法實現的。
HTTP 基於 TCP/IP 協議的,所以,四層負載均衡的效能要高於七層負載均衡。
但是四層負載均衡是不支援域名的。
所以,一般使用七層負載均衡來負載web服務。
5、公有云中常見的負載均衡
1.SLB #阿里雲產品
2.LB #青雲產品
3.CLB #騰訊雲產品
4.ULB #Ucloud產品
6、負載均衡模組
# ngx_http_upstream_module
#語法
Syntax: upstream name { ... }
Default: —
Context: http
#例子
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
... ...
location / {
proxy_pass http://backend;
}
}