nginx负载均衡

安装nginx

请参考lnmp架构

  1. nginx 反向代理
    nginx的负载均衡基于反向代理

1.1 正向代理

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

1.2反向代理

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

区别:

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

  1. upstream

    2.1 负载均衡算法

    2.1.1 轮循
    当weight不指定时,各服务器weight相同,
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    
    upstream bakend {
    server server1.example.com;
    server server2.example.com;
    }
    
    2.1.2 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 如果后端服务器down掉,能自动剔除。 比如以下配置,则1.11服务器的访问量为1.10服务器的两倍。
    
    upstream bakend {
    server server1.example.com weight=1;
    server server2.example.com weight=2;
    }
    
    2.1.3 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
    
    upstream bakend {
    ip_hash
    server server1.example.com;
    server server2.example.com;
    }
    
    2.1.4 fair 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    
    upstream bakend {
    server server1.example.com;
    server server2.example.com;
    fair;
    }
    
    2.1.5 url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。 在upstream中加入hash语句,hash_method是使用的hash算法。
    
    upstream bakend {
    server server1.example.com;
    server server2.example.com;
    hash $request_uri;
    hash_method crc32;
    }
    

    2.2 参数

    1.down 表示单前的server暂时不参与负载
    2.weight 默认为1.weight越大,负载的权重就越大。
    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进行匹配.可以进行重定向或者进行新的代理 负载均衡

  2. 示例
    3.1 网络拓扑
    反向代理服务器 server1.example.com
    后端服务器:
    server2.example.com
    server3.example.com
    3.2 配置
    3.2.1 server1

    
    user nginx;
    worker_processes 1;
    events {
     use epoll;
     worker_connections  1024;
    }
    http {
     include       mime.types;
     default_type  application/octet-stream;
     sendfile        on;
     keepalive_timeout  65;
     upstream nginx.com{
            server server2.example.com:80;
            server server3.example.com:80;
     }  
     server {
         listen       80;
         server_name  localhost;
         location / {
             proxy_pass http://nginx.com;
         proxy_set_header  X-Real-IP  $remote_addr;
       }
     error_page   500 502 503 504  /50x.html;
     location = /50x.html {
             root   html;
     }  
    }  
    }