nginx负载均衡

 nginx功能强大且常用作反向代理或者负载均衡,当我们部署了一个web系统之后,面对日益增多的访问流量,采用nginx做负载均衡是一个实惠的方案,本文用来记录nginx实现负载均衡的一些操作。
实验环境
  为了能够更符合真实环境,我在本机host上绑定了一个域名phantomjs.me,其ip地址为192.168.1.2,是一台安装了nginx的linux服务器,用来模拟负载均衡服务器;另外同一内网中还有3台web服务器,其ip分别是192.168.1.3,192.168.1.4,192.168.1.5。

实验目的  
  当我们访问db.ci域名时,负载均衡服务器能够将流量负载到3台web服务器中,负载的方式可以自由选择。

方案设计
(A)192.168.1.2负载均衡服务器监听80端口,用作负载。
(B)192.168.1.3Web服务器监听80端口。
(C)192.168.1.4Web服务器监听80端口。
(D)192.168.1.5Web服务器监听80端口。
说明:A服务器作为负载均衡服务器,域名直接解析到A服务器(192.168.1.2:80)上。由A服务器将流量负载均衡到B服务器(192.168.1.3:80)、C服务器(192.168.1.4:80)和D服务器(192.168.1.5:80)上。负载均衡可以针对不同的服务器,也可以针对同一台服务器的不同端口,主要看实际需求。

nginx具体配置
  编辑A服务器的nginx.conf,文件位置在nginx安装目录下,一般在/etc/nginx/nginx.conf。在http段加入以下代码:

upstream backserver{ # 要与server_name的名字一致
      server 192.168.1.3:80; #分别对应三台web服务器
      server 192.168.1.4:80;
      server 192.168.1.5:80;
}
server{ 
    listen 80; #nginx开启的端口
    server_name db.ci; #测试域名
    location / { 
        proxy_pass         http://backserver; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
    access_log /var/log/nginx.log;  #添加日志记录
}

重启nginx

/etc/init.d/nginx restart

最后访问http://db.ci

server中可用的参数
默认upstream server后的参数 weight=1 max_fails=1 fail_timeout=10s。

weight:服务器权重
max_fails=number:最大失败尝试次数
fail_timeout=time:设置服务器不可用的时长
backup:备用主机
down:手动标记不再处理任何用户请求
nginx反向代理
这里顺便记录一下,用nginx配置反向代理的方法,这种方法也被大量用在网页劫持(黑产)中,这里不详细介绍了。

配置
将以下内容添加到nginx配置文件的server中:

location /update/{#将本地update目录代理到baidu.com/update目录下,即访问本地update其实是在访问baidu的update。
        proxy_pass         http://baidu.com/update; 
}

重启nginx,尝试访问http://db.ci/update/,其实际获取的是baidu的update目录资源。

点赞