前言

之前写过LVS集群的实现方式,虽然LVS的性能非常的高;但是LVS是工作在传输层的,对于应用层是无能为力的,例如:web环境需要使用https,这次后端服务器全部都要配置ssl证书;且LVS没有健康检测功能,需要借助其他方式进行健康检测。
Nginx不单单可以做一个web服务,它还可以做缓存服务器,负载均衡等;由于工作在应用层,它的并发量低于LVS;同时自身也具有较为优秀I/O复用:epoll的并发能力;因为它的I/O模型为以下几种:

noblocking        #异步
asynchronus        #非阻塞
signal driven    #事件驱动机制

nginx实现负载均衡的主要模块:


ngx_http_proxy_module
ngx_http_upstream_module

一、环境准备

一共需要三台虚拟机进行模拟
拓扑图如下:
nginx负载均衡.jpg

  • 反向代理服务:

         
         PIP:172.16.10.100          #桥接
         LIP:192.168.0.1            #接口为vmnet2
  • UpStream-1:

     
         UIP:192.168.0.2            #接口为vmnet2
  • UpStream-2

         
         UIP:192.168.0.3            #接口为vmnet2
        

    分别在两个上游服务器启动httpd服务,分别提供不同的内容

    
    上游服务-1:Httpd Server-1
    上游服务-2:Httpd Server-2
    

二、编辑配置文件

(1).定义上游服务集群,只能在http配置端加入集群

server address [parameters];


    upstream upservers {
        server 192.168.0.2  max_fails=2 fail_timeout=1s;
        server 192.168.0.3  max_fails=2 fail_timeout=1s;
    }

!> Nginx默认算法时加权轮询的算法

upservers:    #上面的upservers字段为集群的组名,可自定义
ip_hash;    #为源地址hash,可用于session保持;定义在upstream中;

但是现在很多客户端都被运营商做了NAT,用ip_hash算法将会导致负载不均

其中常用的parameters如下:


weight=number        #定义权重
max_fails=number    #当上游服务器健康检测失败次数达到"number",就下线该"Server";
fail_timeout=        #健康检测的超时时长
down                #手动下线标记,可用于升级上游服务器时使用
backup                #备份主机标记,表示主服务器正常时该主机不启用,一旦主服务下线就调度至该主机

(2).配置Server


    location / {
        proxy_pass http://upservers;
        #http://集群组名
        proxy_set_header Host   $host;
        #自定义头,名称为Host,值为$host(客户端请求的HOST)
        proxy_set_header X-Real-IP $remote_addr;
        #自定义头,名称为X-Real-IP,值为$remote_addrt(客户端IP)
    }
    

!> 自定义头部的作用:上游服务器收到的是Proxy Server的访问,客户端IP也就是Proxy Server的IP,此时自定义头,修改上游服务器日志记录方式,既可以记录真实客户端IP。当然也可以将客户端IP记录在Proxy Server上。

修改上游服务器,使其记录真实客户端IP。本次测试上游服务为httpd服务。日志记录修改如下:

vim /etc/httpd/conf/httpd.conf


原有的:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
修改为:LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

!> 记得重载配置文件

三、测试

客户端此时访问Proxy Server,将会轮询调度

nginx反向代理时缓存的配置


<center>END</center>

最后修改:2019 年 10 月 10 日 08 : 19 PM
如果觉得我的文章对你有用,请随意赞赏