0
点赞
收藏
分享

微信扫一扫

使用nginx做代理并实现负载均衡的方法

使用nginx做代理实现负载均衡主要在于server模块:

使用nginx做代理的详细情况如下:

server {

    #对80端口做转发
    listen 80;

   #访问的server_name为www.lzcit.com
    server_name www.lzcit.com;

   #转发路径为www.lzcit.com
    location / {

       #转发时附带host否则默认为ip访问,被代理的服务器多站点配置无效
      proxy_set_header host $host;

      #因为做了转发,去掉这一句服务器端无法获取到客户端的真实ip,做设置后,真实的客户端ip可以通过$_SERVER['HTTP_X_REWRITI_URL']获取;
      proxy_set_header x-rewriti-url $remote_addr;

      #同上,若需要显示真是的服务器端ip则需要添加本句
      proxy_set_header server-addr $server_addr;

      #本句指明被代理的服务器ip为192.168.0.2,且使用的协议为http协议
       proxy_pass http://192.168.0.2;
    }
}

使用nginx做代理并实现负载均衡的方法

#设置被代理的服务器为一组服务器的话(必须放到server外边)
upstream proxy_svrs {

  #根据访问ip的hash结果做分配,否则每次访问时被代理的服务器不通,session会出现无效情况;
   ip_hash;

   #被代理的服务器组不做其他设置的话,默认为轮询
   server 192.168.0.2;
   server 192.168.0.3;

   #设置被代理的服务器不参与负载
   server 192.168.0.4 down;

   #根据weight的值指定轮询比率,weight的值越大越分配的比率越多
   server 192.168.0.5 weight=1;
   server 192.168.0.6 weight=2;

   #当其他机器非backup机器down或者繁忙的时候才会请求本机器
   server 192.168.0.7 backup;

   #根据url的hash结果做分配,当被代理服务器专门用来做缓存的时候比较有效
   hash $request_uri;
   hash_method crc32;

   #根据被代理的服务器的响应时间来做分配
   fair;
}
server {

    #同上
    listen 80;

    #同上
    server_name www.lzcit.com;

    #同上
    location / {

      #同上
       proxy_set_header host $host;

      #同上
      proxy_set_header x-rewriti-url $remote_addr;

       #同上
      proxy_set_header server-addr $server_addr;

       #指明被代理的服务器是一组名为proxy_svrs的服务器组;注:http必须写到这里不可以写到proxy_svrs内
       proxy_pass http://proxy_svrs;
    }
}
  • 注明:分配方式之间是互斥的,所以在真实环境中,需要根据实际的使用情况做好负载设置。

笔者在这里给个简单的例子:

#设置被代理的服务器为一组服务器的话(必须放到server外边)
upstream proxy_svrs {

  #根据访问ip的hash结果做分配,否则每次访问时被代理的服务器不通,session会出现无效情况;
   ip_hash;

   #被代理的服务器组不做其他设置的话,默认为轮询
   server 192.168.0.2;
   server 192.168.0.3;

   #设置被代理的服务器不参与负载
   server 192.168.0.4 down;

   #根据weight的值指定轮询比率,weight的值越大越分配的比率越多
   server 192.168.0.5 weight=1;
   server 192.168.0.6 weight=2;

   #当其他机器非backup机器down或者繁忙的时候才会请求本机器
   server 192.168.0.7 backup;

}

server {

   #对80端口做转发
   listen 80;

   #访问的server_name为www.lzcit.com
   server_name www.lzcit.com;

   #同上
   location / {

      #转发时附带host否则默认为ip访问,被代理的服务器多站点配置无效
       proxy_set_header host $host;

      #因为做了转发,去掉这一句服务器端无法获取到客户端的真实ip,做设置后,真实的客户端ip可以通过$_SERVER['HTTP_X_REWRITI_URL']获取;
       proxy_set_header x-rewriti-url $remote_addr;

      #同上,若需要显示真是的服务器端ip则需要添加本句
       proxy_set_header server-addr $server_addr;

      #指明被代理的服务器是一组名为proxy_svrs的服务器组;注:http必须写到这里不可以写到proxy_svrs内
       proxy_pass http://proxy_svrs;

      #websocket支持
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
   }
}
举报

相关推荐

0 条评论