Nginx负载均衡

Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配:

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

 

配置nginx,编辑配置文件nginx.conf

   将第一行user前的#去掉,改为:

   user nginx nginx;

   设置nginx服务的worker子进程,比如设为2:

   worker_processes 2;

   将以下两行前的#去掉:

   error_log logs/error.log

   pid logs/nginx.pid

 

   把下面的#去掉,这是日志配置:

   log_format  main  '$remote_addr - $remote_user [$time_local] "$request"     '

                       '$status $body_bytes_sent "$http_referer" '

                       '"$http_user_agent" "$http_x_forwarded_for"';

   access_log logs/access.log main;

 

 upstream 配置

  upstream www.test1.com {

  ip_hash;

  server 172.16.125.76:8066 weight=10;

  server 172.16.125.76:8077 down;

  server 172.16.0.18:8066 max_fails=3 fail_timeout=30s;

  server 172.16.0.18:8077 backup;

}

upstream www.test2.com {

  server 172.16.0.21:8066;

  server 192.168.76.98:8066;

  }

 

这是server段的配置

server {

    listen       80;

    server_name  www.test1.com;    #要访问的域名,我这里用的测试域名

    charset utf8;

 

    location / {

        proxy_pass       http://www.test1.com;

        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       80;

    server_name  www.test2.com;    #要访问的域名,我这里用的测试域名

    charset utf8;

 

    location / {

        proxy_pass       http://www.test2.com;

        proxy_set_header Host      $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

 

保存退出!

nginx平滑重启:nginx -s reload   #加载刚刚加入的配置。

posted @ 2016-02-26 00:28  Sefrid  阅读(74)  评论(0编辑  收藏  举报