码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx的负载均衡配置

时间:2016-02-26 14:24:55      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:负载均衡   proxy   代理   nginx   fast-cgi   

名词解释,网络搜索结果

正向代理(Forward Proxy): 

  客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

技术分享

反向代理(Reverse Proxy):

  反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

技术分享

用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答,从原始资源服务器B中取得用户A的需求资源,然后发送给用户A。


upstream节点的分配方式及配置说明

upstream resinserver{            # 定义负载均衡设备的Ip及设备状态
  ip_hash;
  server 127.0.0.1:8000 down;
  server 127.0.0.1:8080 weight=10 fail_timeout=5;
  server 127.0.0.1:6801;
  server 127.0.0.1:6802 backup;
} 

设备的状态:
1.down      表示单前的server暂时不参与负载
2.weight     权重,默认为1。权值越高被分配到的几率越大
3.max_fails   许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout max_fails次失败后,暂停的时间。
5.backup     其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡


下面开始简要的负载均衡配置:

负载均衡:多台服务器平均分担负载,不会因某台服务器的负载宕机而某台服务器闲置的情况,也会不会因某台宕机而影响业务。

实验所需环境

准备三台已安装了nginx服务的服务器:
   A服务器ip: 10.10.10.10(Master)
   B服务器ip: 10.10.10.11
   C服务器ip: 10.10.10.12
测试域名: test.com
部署思路: A服务器作为主服务器,域名直接解析到A服务器上,由A服务器负载均衡到B和C服务器上
域名解析: 在要访问的Windows的hosts文件中加入: 10.10.10.10 test.com
首先确保三台服务都安装的相同版本或者版本差别不大的nginx服务并且启动,默认的nginx.conf文件

A主服务器的nginx.conf在http节点中加入如下代码

http {
......
......
upstream MyServer {       # 定义负载设备ip及其设备状态
    server 10.10.10.11:80;   # 做负载均衡的服务器地址B
    server 10.10.10.12:80;   # 做负载均衡的服务器地址C
   }
server {
    listen 80;
    location / {
            proxy_pass http://MyServer;          # 指向上面设置反向代理转发的服务器
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
   }
......
......
} 

/usr/local/nginx/sbin/nginx -s reload  # 保存后重启 nginx

B、C服务器nginx.conf在http节点中加入如下代码

http {
......
......
server {
    listen       80;        # 和A服务器中upstream中对应设置的server端口要相同
    server_name  test.com;     # 域名
    location / {
      root   html;
      index  index.html index.htm;
 }
 ......
 ......
 }
/usr/local/nginx/sbin/nginx -s reload  # 保存后重启 nginx

至此,简要的nginx负载已配置完毕,在添加了hosts的Windows主机上打开浏览器,输入http://test.com,就可以看到默认的index.html页面,刷新会在B/C服务器上负载轮询。

为了可以直观的查看2台负载,可以在修改B、C服务器的index.html默认文件,以此区别刷新页面的显示。同时也可以通过B、C服务器nginx的log日志查看访问记录

B服务器

技术分享
C服务器
技术分享


可以测试,分别把B、C的nginx服务stop,刷新页面是否正常,达到负载需求。


此时会发现A服务器只做了Master,负载分发,是否也可以提供服务呢。做如下设置后,就可以让ABC三台服务器做负载均衡

在A服务的nginx.conf 做如下设置,将A服务加入到upstream节点中,其它B、C服务器配置不变化

http {
.....
.....
     upstream MyServer {
            server 10.10.10.11:80;    # 做负载均衡的服务器地址B
            server 10.10.10.12:80;    # 做负载均衡的服务器地址C
            server 10.10.10.12:8081;   # 做负载均衡的服务器地址A(添加A服务的地址)
       }
     server {
             listen 80;
            location / {
            proxy_pass           http://MyServer;  # 指向上面设置反向代理转发的服务器
            proxy_set_header   Host   $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
           }
         }
     server {
            listen 8081;                 # 端口
            server_name test.com;    # 域名
            location / {
            root html;
            index index.html index.htm;
        }
        }
....
....
}
/usr/local/nginx/sbin/nginx -s reload # 重启nginx

再刷新页面,此时就可以发现三台主机页面都已分别显示

A服务器
技术分享
B服务器
技术分享
C服务器
技术分享




本文出自 “行 者--->” 博客,请务必保留此出处http://liumissyou.blog.51cto.com/4828343/1745239

Nginx的负载均衡配置

标签:负载均衡   proxy   代理   nginx   fast-cgi   

原文地址:http://liumissyou.blog.51cto.com/4828343/1745239

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!