飞道的博客

Nginx反向代理和负载均衡

451人阅读  评论(0)

前言:

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

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

  1. 轮询:这一项为默认的,当没有配置负载均衡时,默认为轮询状态,例如,第一个请求web1加载,第二个请求web2加载,第三个请求web3加载,第四个请求web1加载… 以此类推。
  2. ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
  3. url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
  4. 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



一.反向代理

  1. 虚拟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;                                                                                                       
                 }
     }

  1. 创建server1网页 , 其他四台配置类似
   vim /var/www/nginx/server1/index.html
   
   ### 内容如下 ###
   111111111111
   
  1. 配置完毕如下

① 主机的配置文件

②主机的网页目录


二.负载均衡

  1. 创建负载均衡的配置
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个字节, 连接关闭。像长连接
                }
}

  1. 保存退出,并重启,具体子配置目录下如下图,五个虚拟主机配置,一个负载均衡配置。

三.查看效果

默认轮询策略


ip_hash策略


四.负载均衡拓展

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

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

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


======================================================================================================================================================================================================================================================================================================
辛苦浏览观看,如果对你有帮助,请顺手点个赞吧 (σ゚∀゚)σ…:*☆


转载:https://blog.csdn.net/qq_26129413/article/details/112593277
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场