7 层负载均衡

7 层就是用域名来进行转发

类似配置文件:

vim /etc/nginx/conf.d/xxx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream  wordpress {
server 192.168.1.20:8000 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.21:8000 weight=5 max_fails=3 fail_timeout=30s;
}

server {
listen 80 ;
server_name wordpress.zahui.fan;

location / {
proxy_pass http://wordpress;
}
}

反代到虚拟主机的另一台 Nginx

比如现在有一台服务器,部署了 a、b 两个服务,比如 a.com 到 a 服务,b.com 到 b 服务,这种情况我的 Nginx 想要代理 b 服务,就需要指定反代 header proxy_set_header Host "b.com",配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
listen [::]:80;
server_name c.com;
client_max_body_size 1024m;

location / {
proxy_pass https://x.x.x.x; # b服务的ip,也可以用域名,用域名理论上不需要下面这条。
proxy_set_header HOST b.com; # 代理服务器请求后端使用的Header
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

4 层负载

4 层负载就是类似端口转发

vim /etc/nginx.conf 最后添加:

1
2
3
stream {
include port_forward.conf;
}

vim /etc/nginx/port_forward.conf

简单配置

1
2
3
4
5
# 访问本机的5555端口, 转发到172.16.1.7的22端口
server {
listen 5555;
proxy_pass 172.16.1.7:22;
}

复杂配置

1
2
3
4
5
6
7
8
9
10
11
upstream mysql-server {
server 192.168.1.20:3306 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.21:3306 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.22:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 3306;
proxy_connect_timeout 1s;
proxy_timeout 10s;
proxy_pass mysql-server;
}

max_fails=3 fail_timeout=30s; 这个配置的意思是:如果在 30 秒 内,对后端的请求失败了 3 次,那么接下来的 30 秒 内,Nginx 不会再向它发送任何请求,30 秒隔离期结束后,Nginx 会放一个请求过去试试水,如果这个请求 成功:服务器被重新标记为 “健康”,恢复流量转发。如果这个请求 失败:计数器归零,重新开始下一轮 30 秒的探测期(回到第 0 秒的状态,再次开始统计失败次数)。