目录

前言:

当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
  负载均衡部署的前提是部署过多台反向代理服务器,或者多台虚拟主机服务器,客户端对服务器的访问通过Nginx的负载均衡策略,选择相对来说最优的代理服务器或虚拟主机进行访问。

Nginx反向代理和负载均衡_负载均衡

负载均衡的调度算法有四种:

  • 轮询:这一项为默认的,当没有配置负载均衡时,默认为轮询状态,例如,第一个请求web1加载,第二个请求web2加载,第三个请求web3加载,第四个请求web1加载… 以此类推。
  • ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
  • url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
  • fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。

准备工作

系统:Centos7
Nginx版本: 1.18.0
地址:10.8.161.9
测试机系统:win10
地址:10.8.161.45 (同一局域网)
Nginx代理主机端口:80
负载主机端口:91、92、93、94、95

一.反向代理

  • 虚拟5台主机,以端口方式
    server1配置如下 , 其他四台配置类似
vim /etc/nginx/conf.d/server1.conf  # 在子配置文件中创建第一台配置
### 配置如下 ###
server {
listen 91; #定义端口为 91 端口
server_name 10.8.161.6;
location / {
root /var/www/nginx/server1; # 指定网页目录
index index.html index.htm; # 指定访问的网页
limit_rate 2k;
}
}
  • 创建server1网页 , 其他四台配置类似
vim /var/www/nginx/server1/index.html

### 内容如下 ###
111111111111
  • 配置完毕如下

① 主机的配置文件

tree /etc/nginx

Nginx反向代理和负载均衡_服务器_02


②主机的网页目录

二.负载均衡

  • 创建负载均衡的配置
vim /etc/nginx/conf.d/fzjh.conf     # 在子配置文件conf.d中配置负载均衡配置文件

upstream fzjh { # 配置一个 负载均衡的主机池
# ip_hash; # 负载均衡调度算法,算法有四种,详情见文章开始部分如果注释掉默认为轮询状态
server 10.8.161.6:91; # 指定主机
server 10.8.161.6:92;
server 10.8.161.6:93;
server 10.8.161.6:94;
server 10.8.161.6:95;
}
server { # 配置Nginx的负载均衡
listen 80; # 使用80端口 ,不要和其他主机端口冲突
server_name localhost; # 本机地址
location / {
proxy_pass http://fzjh; # 指定负载的主机池
# proxy_set_header Host $http_host; # 真实服务器的地址,可以是ip也可以是域名和url地址
# proxy_set_header X-Real-IP $remote_addr; # 启用客户端真实地址(否则日志中显示的是代理在访问网站)
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录代理地址
# proxy_connect_timeout 30; # 后端服务器连接的超时时间发起三次握手等候响应超时时间
# proxy_send_timeout 60; # 后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
# proxy_read_timeout 60; # nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
}
}
  • 保存退出,并重启,具体子配置目录下如下图,五个虚拟主机配置,一个负载均衡配置。
tree /ect/nginx/conf.d

Nginx反向代理和负载均衡_负载均衡_03

三.查看效果

Nginx反向代理和负载均衡_负载均衡_04

ip_hash策略

四.负载均衡拓展

除了负载均衡的四种调度算法外,还可以单独在主机上后设置权重,或是其他策略。

Nginx反向代理和负载均衡_服务器_05

weight:权重。 weight=1表示一次 ,例如图中5台为ABCDE,那么根据图中访问策略为ABBCCCDE 根据权重进行平均访问。

Nginx反向代理和负载均衡_负载均衡_06

down:表示当前的server暂时不参与负载均衡。
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回错误。
fail_timeout:在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。
backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。