当前位置: > Linux集群 > 负载均衡SLB >

nginx基于不同的服务器负载均衡

时间:2014-05-15 02:03来源:linux.it.net.cn 作者:IT网

不对的地方,欢迎大家拍砖。

现在有如下三台服务器:
10.57.22.201(做负载均衡配制)(也可以同时做负载3,不同端口就可以)
10.57.22.202(负载1)
10.57.22.203(负载2)

201的配制:

nginx.conf中添加:
    upstream www.abc.com{
       server 10.57.22.202:80 weight=1;
       server 10.57.22.203:80 weight=1;
    }

vhosts.conf中添加:

    #www.abc.com
    server {
              listen  80;
              server_name  www.abc.com;
             
              proxy_redirect off;
              location / {
                       proxy_pass        http://www.abc.com;
                       proxy_set_header   Host             $host;

#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移
proxy_next_upstream http_502 http_504 error timeout invalid_header; 

                       proxy_set_header   X-Real-IP        $remote_addr;#后端的Web服务器可以通过X-Real-IP获取用户真实IP
                       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        
                       #允许客户端请求的最大的单个文件字节数
                       client_max_body_size     10m;

                       #缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
                       client_body_buffer_size  128k;
              
                       #跟后端服务器连接的超时时间_发起握手等候响应超时时间
                       proxy_connect_timeout    600;
              
                       #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
                       proxy_read_timeout       600;
              
                       #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
                       proxy_send_timeout       600;

                       #代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
                       proxy_buffer_size        8k;
              
                       #同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
                       proxy_buffers            4 32k;
              
                       #如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
                       proxy_busy_buffers_size 64k;
              
                       #proxy缓存临时文件的大小
                       proxy_temp_file_write_size 64k;

              }

        #if ($request_uri   ~*   ".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$")
        #{
        #        proxy_pass http://squid.abc.com;
        #}
        #if ($request_uri   ~*   "^/view/(.*)$")
        #{
        #        proxy_pass http://squid.abc.com;
        #}
              log_format  www_abc_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /soft/www_abc_com.log  www_abc_com;
    }

202,203中的配制:

##############  www.abc.com  ################
server{
        listen       80;
        server_name  www.abc.com;
        index index.html index.htm index.php;
        root  /var/www;

        location ~ \.php$ {
                if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}
                fastcgi_pass   127.0.0.1:9000;
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
                include fastcgi_params;
        }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        access_log   off;
        expires      30d;
    }

    location ~ .*\.(js|css)?$ {
        access_log   off;
        expires      1h;
    }
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
    access_log  /var/www/logs/abc_access.log  access;
}

 

测试方法:

window下绑www.abc.com到201.然后在地址栏中访问www.abc.com/index.php,就可以实现负载中的切换作用,你可以在www.abc.com下都放一下index.php文件,打印出服务器的IP,则可以看到效果。

关于session如何共享可以把session共享到memcached中。

 参考:http://hi.baidu.com/woaidelphi/blog/item/02e0a9080551338c0b7b8237.html

相关知识:

nginx 的 upstream目前支持 5 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
5)、url_hash(第三方)

 

每个设备的状态设置为:
a)  down 表示单前的server暂时不参与负载
b)  weight  默认为1.weight越大,负载的权重就越大。
c)  max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模
块定义的错误
d)  fail_timeout:max_fails次失败后,暂停的时间。
e)  backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器

压力会最轻。

 

还可以在202,203负载中做不同端口的配制:
#default-cgid可以是任何名字,要和vhost.conf对应
upstream  default-cgid {
      server 127.0.0.1:9000;
      server 127.0.0.1:9001 weight=2;
      server 127.0.0.1:9002 down;
      server 127.0.0.1:9003 down;
      server 127.0.0.1:9004 backup;
}
在需要使用负载均衡的 server中增加,如下红色部分
location ~ \.php$ {
                if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}
                fastcgi_pass   default-cgid; #只用一个端口 fastcgi_pass 127.0.0.1:9000;
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
                include fastcgi_params;
        }

#Nginx
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容