1. 程式人生 > 其它 >10 nginx之反向代理 、負載均衡

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;
    }
}