精华内容
下载资源
问答
  • Nginx反向代理实现负载均衡总结

    万次阅读 2016-03-23 22:57:12
    Nginx反向代理实现负载均衡总结: 从Nginx的诞生来源就可以知道,它是为了解决大数据...好了,废话不多说了,下面就来总结介绍下Nginx的反向代理如何实现负载均衡。 • 环境准备 • 反向代理 • 负载均衡 • 页面缓存

    Nginx反向代理实现负载均衡总结:

    从Nginx的诞生来源就可以知道,它是为了解决大数据量高并发访问而产生的,这也要感谢Nginx的开发者,使Nginx现今成为了LNMP重要的成员。好了,废话不多说了,下面就来总结介绍下Nginx的反向代理如何实现负载均衡。

     

    ·     环境准备

    ·     反向代理

    ·     负载均衡

    ·     页面缓存

     

    一、环境准备

    1、两台均衡服务器

    由于条件限制,我这里只有一台电脑设备,所以只能使用Nginx的虚拟机替代了,他们分别为:

    test1.cwteam.com   中存放index.html 内容:Hello Test1

    test2.cwteam.com   中存放index.html 内容:Hello Test2

    注:

    对于虚拟机的配置,不是这里的内容,具体可查看上一篇文章《Nginx常用配置总结》http://blog.csdn.net/why_2012_gogo/article/details/50967447。

    2、测试均衡服务器


     

    二、反向代理

    1、反向代理原理

    当客户端请求反向代理服务器时,代理服务器会根据设置的调度规则定位到指定的服务器,然后从指定的服务器直接返回内容给客户端。有人会问,正向代理是什么?从名字就可知道他的道理,它介于客户端和原始服务器之间,当客户请求代理服务器时,必须指定原始服务器,然后,代理服务器再去请求原始服务器,当原始服务器处理好结果后,交给代理服务器并返回给客户端。

    2、Nginx的反向代理

    配置nginx.conf文件:

    location / {

                proxy_pass  http://test1.cwteam.com/index.html;

            }

    注意:配置后,重启nginx。

     

    测试反向代理:

    浏览器输入:http://127.0.0.1

    正常的话,Nginx会反向定位到上面的test1服务器:

    上图已经说明,我们的反向代理配置成功了,配置中使用了指令:proxy_pass(指定代理位置的服务器地址URL),下面继续介绍下负载均衡。

     

    三、负载均衡

    随着业务不断拓展、用户量不断增多,原本一台Nginx代理的服务器已经显得吃力,不论在性能、响应速度等都显得力不从心,所以需要对后台服务器做负载均衡,缓解一台或几台服务器的高并发请求压力。

    1、Upstream

    负载均衡需要使用Nginx支持的HTTP Upstream模块,该模块通过一个简单的算法调度来实现客户端ip到服务端负载均衡。Upstream目前支持4种调度算法:

    A、默认的轮循

    默认的调度算法,在处理客户端的每次请求时,按照时间顺序逐一分配到均衡服务器,可以设定服务器的权重(weight)比值,比值越大访问的几率越大,一般用在后台服务器列表访问性能不均匀情况。

    B、ip_hash

    记录每次访客的ip地址,固定分配给指定的服务器,有效的解决了不同服务器网页Session的问题。

    C、fair

    根据后端服务器响应的时间长短来分配,响应时间越短被分配几率越大,它属于第三方插件,Nginx本身并不支持,如需使用必须下载Nginx的upstream_fair模块。

    D、url_hash

    按访问的地址url的hash值结果分配, 使每个url定向到指定的服务器,可以提高后端服务器的缓存效率,同样的,Nginx本身也不支持该算法,需要第三方的hash软件。

     

    2、Upstream支持的状态参数

    在Nginx的Upstream模块中,除了可以通过server指定到特定服务器和端口,还可以设置服务器在负载均衡中的状态。目前的状态如下:

    A、down

    代表当前的服务器server不参与负载均衡。

    B、backup

    预留的备用设备,也就是当其它的服务器故障或忙时才会分配它给客户请求,所以它的压力最小。

    C、max_fails

    服务器server允许请求失败的次数,默认为1次,当失败次数超过限定的次数,就会返回proxy_next_upstream错误信息。

    D、fail_timeout

    当经历了max_fails的次数后,暂停服务的时间,一般与max_fails配合使用。

    注意:

    当服务器的调度算法为ip_hash时,服务器在负载均衡中的状态不能是weight和backup,理由很明显,不做说明。

     

    3、Nginx配置负载

    Nginx中配置负载均衡比较简单,只需要修改nginx.conf配置文件,添加均衡服务器列表,以及使用proxy_pass引用服务器列表即可,具体如下:

    A、upstream

    #upstream

    upstream webservers {

      server 127.0.0.1:8080 weight=1;

      server 127.0.0.1:8081 weight=1;

    }   

    注:

    该配置放在http{}内,server{}之外,否则会报错。

    B、proxy_pass

    location / {

      proxy_pass http://webservers;

      proxy_set_header X-Real-IP$remote_addr;

     }

    注:

    引用均衡服务器的列表

    C、测试均衡

    浏览器输入:http://127.0.0.1 反复刷新页面,如果看到test1和test2服务端交替出现,那么说明负载已经成功(如果其中一台服务器挂掉,如test1挂掉,那么只会给test2服务器分配),测试结果如下:

    4、Nginx的健康状态检查

    配置upstream状态max_fails和fail_timeout,对Nginx健康检查。

    A、upstream

    #upstream

    upstream webservers {

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

    server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=2;

     }

    B、测试

    这里的结果与上面的测试结果是一样的,这是添加了max_fails和fail_timeout。

     

    5、配置backup服务器

    这里需要添加一台backup虚拟机服务器,具体这里不介绍。服务器地址为:

    http://backup.cwteam.com 端口:8082 内容:Error is now,please check theerror.log

     

    A、upstream

    #upstream

    upstream webservers {

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8082 backup;

        }

     

    B、测试

    为了模拟在test1和test2服务器都不工作,这里我将test1和test2的虚拟机配置文件.conf中的监听端口分别改为:8084和8085,然后记得重启Nginx服务,这样在服务器列表中的test1和test2就不能正常工作。

    输入:http://127.0.0.1 反复刷新,结果显示:


    上图,说明了在test1和test2都坏掉之后,backup算法的服务器就会被访问了,下面来继续总结ip_hash算法。

     

    6、配置ip_hash服务器

    配置ip_hash算法调度服务器时,不能设置服务器的状态为weight和backup,所以需要关闭Nginx.conf中的backup状态服务器,配置完成记得重启nginx,如下:

     

    A、upstream

    #upstream

    upstream webservers {

          ip_hash;

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

          #server 127.0.0.1:8082 backup;

        }

     

    B、测试

    输入:http://127.0.0.1 反复刷新页面 如果调度的服务器总是test1或是test2时,那就说明ip_hash算法服务器设置成功,结果如下:

     

    7、统计Web链接的次数

    $ netstat -an | grep :8080 | wc -l

    12

     

    注意:

    使用虚拟主机验证Nginx反向代理及负载均衡是有限制的,正常应该是为每个服务器配置web服务器,所以对应的均衡服务器配置验证时,因该以关闭web服务器为准,而且在对应的服务器中可以查看日志信息。

     

    四、页面缓存

    1、缓存指令

    Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道:

    A、proxy_cache_path

    格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]

    说明:

    path -缓存文件存放的位置

    levels -缓存目录结构,可以是1、2、3位数字作为目录,最多是3位数字如:1,1:2

    keys_zone -指定缓存池名字及大小,每个定义缓存路径必须不同

    inactive -设置每个缓存区缓存文件的有效时长,超过该时长没被访问的缓存被删除

    max_size -设置不活动的缓存大小,不活动的缓存超过该大小后被删除

    B、proxy_cache

    格式:

    proxy_cache cache_name

    说明:

    指定缓存区域的名字,一个相同的区域可以在不同的地方使用。

    C、proxy_cache_valid

    格式:

    proxy_cache_valid reply_code [reply code…|any] time;

    说明:

    reply_code -不同的应答代码

    time -为不同应答设置不同缓存时长 默认为分钟m

    any - 代表任何代码

     

    2、页面缓存设置

    A、新建缓存页面

    $ mkdir –pv /nginx/cache/webpages

    B、配置nginx.conf

    proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

        server {

            listen       80;

            server_name  localhost;

            charset utf-8;

     

            location / {

                proxy_passhttp://webservers;

                proxy_set_header X-Real-IP$remote_addr;

                proxy_cache webpages;

                proxy_cache_valid 20010m;

            }

        }

    最后,测试下配置是否正确:

    $sudo nginx –t

    然后,重载下nginx服务:

    $sudo nginx –s reload

     

    C、测试结果

    浏览器输入:http://127.0.0.1 然后查看缓存路径下是否生成缓存文件,以及缓存文件格式是否正确,缓存的结果:

    /nginx/cache/webpages/f/63/681ad4c77694b65d61c9985553a2763f

    上面的路径规则已经按照我们预期设置生成,缓存文件格式是url的hash格式,下面可以查看下这个文件是否是我们使用的页面,默认生成的缓存目录f 级别是不允许进入访问的,为了演示我已经给予其777权限了。

    $cat 681ad4c77694b65d61c9985553a2763f

     

     

    D、如何知道是否访问缓存?

    答案很简单,我们使用谷歌浏览器浏览网页,然后打开开发者面板,查看里面的Response Headers响应头中的信息:

    但从上面是看不出是否调用了缓存文件,因为需要额外配置下。首先,要了解下两个缓存变量:

    $server_addr - 显示的服务器地址

    $upstream_cache_status - 缓存的状态 可能的值为:MISS(未命中)、Hint(命中)、Expired(请求传递到后台)、Stale(后端得到过期的应答)、Updating(正更新,使用旧的应答)等。

    那么,在这里如果缓存的状态为HINT,就说明命中了缓存,也就是调用了缓存文件。接下来,配置下nginx.conf文件,然后重新加载,刷新页面即刻,具体如下:

    A、配置文件nginx.conf

    proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

        server {

            listen       80;

            server_name  localhost;

            charset utf-8;

            #add headers

            add_header X-Via$server_addr;

            add_header X-Cache$upstream_cache_status;

            location / {

                proxy_passhttp://webservers;

                proxy_set_headerX-Real-IP $remote_addr;

                proxy_cache webpages;

                proxy_cache_valid 20010m;

            }

        }

    B、测试结果

    如上图中的Resonpse Headers部分,已经说明缓存已经调度了。

     

     

    好了,关于Nginx的反向代理、负载均衡及页面缓存都介绍完了,如有问题请及时讨论。

     

     

     

    展开全文
  • 转载自: https://blog.csdn.net/why_2012_gogo/article/details/50967520Nginx反向代理实现负载均衡总结:从Nginx的诞生来源就...好了,废话不多说了,下面就来总结介绍下Nginx的反向代理如何实现负载均衡。 · ...

    转载自: https://blog.csdn.net/why_2012_gogo/article/details/50967520


    Nginx反向代理实现负载均衡总结:

    从Nginx的诞生来源就可以知道,它是为了解决大数据量高并发访问而产生的,这也要感谢Nginx的开发者,使Nginx现今成为了LNMP重要的成员。好了,废话不多说了,下面就来总结介绍下Nginx的反向代理如何实现负载均衡。

     

    ·     环境准备

    ·     反向代理

    ·     负载均衡

    ·     页面缓存

     

    一、环境准备

    1、两台均衡服务器

    由于条件限制,我这里只有一台电脑设备,所以只能使用Nginx的虚拟机替代了,他们分别为:

    test1.cwteam.com   中存放index.html 内容:Hello Test1

    test2.cwteam.com   中存放index.html 内容:Hello Test2

    注:

    对于虚拟机的配置,不是这里的内容,具体可查看上一篇文章《Nginx常用配置总结》http://blog.csdn.net/why_2012_gogo/article/details/50967447。

    2、测试均衡服务器


     

    二、反向代理

    1、反向代理原理

    当客户端请求反向代理服务器时,代理服务器会根据设置的调度规则定位到指定的服务器,然后从指定的服务器直接返回内容给客户端。有人会问,正向代理是什么?从名字就可知道他的道理,它介于客户端和原始服务器之间,当客户请求代理服务器时,必须指定原始服务器,然后,代理服务器再去请求原始服务器,当原始服务器处理好结果后,交给代理服务器并返回给客户端。

    2、Nginx的反向代理

    配置nginx.conf文件:

    location / {

                proxy_pass  http://test1.cwteam.com/index.html;

            }

    注意:配置后,重启nginx。

     

    测试反向代理:

    浏览器输入:http://127.0.0.1

    正常的话,Nginx会反向定位到上面的test1服务器:

    上图已经说明,我们的反向代理配置成功了,配置中使用了指令:proxy_pass(指定代理位置的服务器地址URL),下面继续介绍下负载均衡。

     

    三、负载均衡

    随着业务不断拓展、用户量不断增多,原本一台Nginx代理的服务器已经显得吃力,不论在性能、响应速度等都显得力不从心,所以需要对后台服务器做负载均衡,缓解一台或几台服务器的高并发请求压力。

    1、Upstream

    负载均衡需要使用Nginx支持的HTTP Upstream模块,该模块通过一个简单的算法调度来实现客户端ip到服务端负载均衡。Upstream目前支持4种调度算法:

    A、默认的轮循

    默认的调度算法,在处理客户端的每次请求时,按照时间顺序逐一分配到均衡服务器,可以设定服务器的权重(weight)比值,比值越大访问的几率越大,一般用在后台服务器列表访问性能不均匀情况。

    B、ip_hash

    记录每次访客的ip地址,固定分配给指定的服务器,有效的解决了不同服务器网页Session的问题。

    C、fair

    根据后端服务器响应的时间长短来分配,响应时间越短被分配几率越大,它属于第三方插件,Nginx本身并不支持,如需使用必须下载Nginx的upstream_fair模块。

    D、url_hash

    按访问的地址url的hash值结果分配, 使每个url定向到指定的服务器,可以提高后端服务器的缓存效率,同样的,Nginx本身也不支持该算法,需要第三方的hash软件。

     

    2、Upstream支持的状态参数

    在Nginx的Upstream模块中,除了可以通过server指定到特定服务器和端口,还可以设置服务器在负载均衡中的状态。目前的状态如下:

    A、down

    代表当前的服务器server不参与负载均衡。

    B、backup

    预留的备用设备,也就是当其它的服务器故障或忙时才会分配它给客户请求,所以它的压力最小。

    C、max_fails

    服务器server允许请求失败的次数,默认为1次,当失败次数超过限定的次数,就会返回proxy_next_upstream错误信息。

    D、fail_timeout

    当经历了max_fails的次数后,暂停服务的时间,一般与max_fails配合使用。

    注意:

    当服务器的调度算法为ip_hash时,服务器在负载均衡中的状态不能是weight和backup,理由很明显,不做说明。

     

    3、Nginx配置负载

    Nginx中配置负载均衡比较简单,只需要修改nginx.conf配置文件,添加均衡服务器列表,以及使用proxy_pass引用服务器列表即可,具体如下:

    A、upstream

    #upstream

    upstream webservers {

      server 127.0.0.1:8080 weight=1;

      server 127.0.0.1:8081 weight=1;

    }   

    注:

    该配置放在http{}内,server{}之外,否则会报错。

    B、proxy_pass

    location / {

      proxy_pass http://webservers;

      proxy_set_header X-Real-IP$remote_addr;

     }

    注:

    引用均衡服务器的列表

    C、测试均衡

    浏览器输入:http://127.0.0.1 反复刷新页面,如果看到test1和test2服务端交替出现,那么说明负载已经成功(如果其中一台服务器挂掉,如test1挂掉,那么只会给test2服务器分配),测试结果如下:

    4、Nginx的健康状态检查

    配置upstream状态max_fails和fail_timeout,对Nginx健康检查。

    A、upstream

    #upstream

    upstream webservers {

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

    server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=2;

     }

    B、测试

    这里的结果与上面的测试结果是一样的,这是添加了max_fails和fail_timeout。

     

    5、配置backup服务器

    这里需要添加一台backup虚拟机服务器,具体这里不介绍。服务器地址为:

    http://backup.cwteam.com 端口:8082 内容:Error is now,please check theerror.log

     

    A、upstream

    #upstream

    upstream webservers {

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8082 backup;

        }

     

    B、测试

    为了模拟在test1和test2服务器都不工作,这里我将test1和test2的虚拟机配置文件.conf中的监听端口分别改为:8084和8085,然后记得重启Nginx服务,这样在服务器列表中的test1和test2就不能正常工作。

    输入:http://127.0.0.1 反复刷新,结果显示:


    上图,说明了在test1和test2都坏掉之后,backup算法的服务器就会被访问了,下面来继续总结ip_hash算法。

     

    6、配置ip_hash服务器

    配置ip_hash算法调度服务器时,不能设置服务器的状态为weight和backup,所以需要关闭Nginx.conf中的backup状态服务器,配置完成记得重启nginx,如下:

     

    A、upstream

    #upstream

    upstream webservers {

          ip_hash;

          server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

          server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

          #server 127.0.0.1:8082 backup;

        }

     

    B、测试

    输入:http://127.0.0.1 反复刷新页面 如果调度的服务器总是test1或是test2时,那就说明ip_hash算法服务器设置成功,结果如下:

     

    7、统计Web链接的次数

    $ netstat -an | grep :8080 | wc -l

    12

     

    注意:

    使用虚拟主机验证Nginx反向代理及负载均衡是有限制的,正常应该是为每个服务器配置web服务器,所以对应的均衡服务器配置验证时,因该以关闭web服务器为准,而且在对应的服务器中可以查看日志信息。

     

    四、页面缓存

    1、缓存指令

    Nginx的缓存配置比较直观简单,具体有下面几个指令需要知道:

    A、proxy_cache_path

    格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]

    说明:

    path -缓存文件存放的位置

    levels -缓存目录结构,可以是1、2、3位数字作为目录,最多是3位数字如:1,1:2

    keys_zone -指定缓存池名字及大小,每个定义缓存路径必须不同

    inactive -设置每个缓存区缓存文件的有效时长,超过该时长没被访问的缓存被删除

    max_size -设置不活动的缓存大小,不活动的缓存超过该大小后被删除

    B、proxy_cache

    格式:

    proxy_cache cache_name

    说明:

    指定缓存区域的名字,一个相同的区域可以在不同的地方使用。

    C、proxy_cache_valid

    格式:

    proxy_cache_valid reply_code [reply code…|any] time;

    说明:

    reply_code -不同的应答代码

    time -为不同应答设置不同缓存时长 默认为分钟m

    any - 代表任何代码

     

    2、页面缓存设置

    A、新建缓存页面

    $ mkdir –pv /nginx/cache/webpages

    B、配置nginx.conf

    proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

        server {

            listen       80;

            server_name  localhost;

            charset utf-8;

     

            location / {

                proxy_passhttp://webservers;

                proxy_set_header X-Real-IP$remote_addr;

                proxy_cache webpages;

                proxy_cache_valid 20010m;

            }

        }

    最后,测试下配置是否正确:

    $sudo nginx –t

    然后,重载下nginx服务:

    $sudo nginx –s reload

     

    C、测试结果

    浏览器输入:http://127.0.0.1 然后查看缓存路径下是否生成缓存文件,以及缓存文件格式是否正确,缓存的结果:

    /nginx/cache/webpages/f/63/681ad4c77694b65d61c9985553a2763f

    上面的路径规则已经按照我们预期设置生成,缓存文件格式是url的hash格式,下面可以查看下这个文件是否是我们使用的页面,默认生成的缓存目录f 级别是不允许进入访问的,为了演示我已经给予其777权限了。

    $cat 681ad4c77694b65d61c9985553a2763f

     

     

    D、如何知道是否访问缓存?

    答案很简单,我们使用谷歌浏览器浏览网页,然后打开开发者面板,查看里面的Response Headers响应头中的信息:

    但从上面是看不出是否调用了缓存文件,因为需要额外配置下。首先,要了解下两个缓存变量:

    $server_addr - 显示的服务器地址

    $upstream_cache_status - 缓存的状态 可能的值为:MISS(未命中)、Hint(命中)、Expired(请求传递到后台)、Stale(后端得到过期的应答)、Updating(正更新,使用旧的应答)等。

    那么,在这里如果缓存的状态为HINT,就说明命中了缓存,也就是调用了缓存文件。接下来,配置下nginx.conf文件,然后重新加载,刷新页面即刻,具体如下:

    A、配置文件nginx.conf

    proxy_cache_path /nginx/cache/webpages levels=1:2 keys_zone=webpages:30mmax_size=2g;

        server {

            listen       80;

            server_name  localhost;

            charset utf-8;

            #add headers

            add_header X-Via$server_addr;

            add_header X-Cache$upstream_cache_status;

            location / {

                proxy_passhttp://webservers;

                proxy_set_headerX-Real-IP $remote_addr;

                proxy_cache webpages;

                proxy_cache_valid 20010m;

            }

        }

    B、测试结果

    如上图中的Resonpse Headers部分,已经说明缓存已经调度了。

     

     

    好了,关于Nginx的反向代理、负载均衡及页面缓存都介绍完了,如有问题请及时讨论。

    转载自: https://blog.csdn.net/why_2012_gogo/article/details/50967520

    展开全文
  • 〉另外一个功能就是作为反向代理服务器实现负载均衡 以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也...
  • Nginx-反向代理实现负载均衡策略

    千次阅读 2018-08-05 20:17:48
    这是最直白的理解,那么反向代理到底时如何实现的呢? 模拟反向代理需要的配置 一台虚拟机、一个nginx服务器作为反向代理服务器、两个tomcat作为目标服务器。 实现反向代理 nginx和tomcat的安装此处就省略了。。...

    反向代理作为客户端和目标服务器的中介,接受客户端发来的请求,通过均衡策略来访问目标服务器,获取数据,返回给客户端。这是最直白的理解,那么反向代理到底时如何实现的呢?

    模拟反向代理需要的配置

    一台虚拟机、一个nginx服务器作为反向代理服务器、两个tomcat作为目标服务器。

    实现反向代理

    nginx和tomcat的安装此处就省略了。。。
    1、修改Nginx.conf配置文件
    这里写图片描述

    upstream tomcats{
         server 192.168.128.111:8080;
         server 192.168.128.111:8081;
       }
    
       server {
            listen       80;
            server_name  tomcat.taotao.com;
    
            #charset koi8-r;
    
            #        #access_log  logs/host.access.log  main;
    
            location / {
              proxy_pass   http://tomcats;
              index  index.html index.htm;
            }
      }
    

    在http节点下,添加upstream节点。upstream配置了tomcat的ip及端口,作为目标服务器。
    serve是nginx服务器,作为反向代理服务器,需要注意的是反向代理localtion节点中的proxy_pass配置为:http://+upstream名称,即“http://tomcats
    其中的原理正是nginx反向代理服务器通过“http://tomcats”来访问配置好的两台tomcats目标服务器。

    2、启动并查看nginx进程
    这里写图片描述

    3、启动并查看tomcat进程
    这里写图片描述
    这里写图片描述

    4、访问tomcats.taotao.com
    这里写图片描述
    这里写图片描述
    我们可以看到访问反向代理服务器中配置的路径tomcat.taotao.com便可以访问到目标服务器tomcat,刷新页面,可以实现轮流访问8080和8081两台目标服务器。
    这样就实现了反向代理。

    负载均衡策略

    1、轮询
    上边的访问策略就是轮询(默认)方式进行负载,我们刷新浏览器可以看到,两台目标服务器几乎是轮流着访问。

    upstream tomcats{
         server 192.168.128.111:8080;
         server 192.168.128.111:8081;
       }

    2、权重
    指定轮询几率,weitht和访问比率成正比。如下图所示,192.168.128.111:8080的访问几率要比192.168.128.111:8081的访问比率高一倍。

    upstream tomcats{
         server 192.168.128.111:8080 weight=2;
         server 192.168.128.111:8081;
       }
    

    3、ip-hash
    上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
    我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    upstream tomcats{
         ip_hash;
         server 192.168.128.111:8080;
         server 192.168.128.111:8081;
       }
    

    ip_hash;

    4、fair(第三方)
    按后端服务器的相应时间来分配请求、相应时间短的优先分配。

    upstream tomcats{
         ip_hash;
         server 192.168.128.111:8080;
         server 192.168.128.111:8081;
         fair;
       }
    

    5、url_hash
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

    upstream tomcats{
         server 192.168.128.111:8080;
         server 192.168.128.111:8081;
         hash $request_uri;
         hash_method crc32; 
     }
    
    展开全文
  • 负载均衡的原理IIS下实现负载均衡IIS+Nginx实现负载均衡、反向代理什么是反向代理Nginx的反向代理如何用IIS+Nginx实现反向代理总结 IIS下的负载均衡 我们的网站为什么要负载均衡? 因为在网站的创立初期,我们一般都...

    IIS下的负载均衡

    我们的网站为什么要负载均衡?

    因为在网站的创立初期,我们一般都多个客户端(浏览器)访问同一台机器(服务器),但是随着用户的越来越多,无论在性能上还是稳定性上单台服务器渐渐的无法为我们提供稳定的服务。

    于是我们会把多台机器组成一个集群统一对外提供服务,但是我们的网站对外只提供了一个端口进行请求,比如我们输入http://www.baidu.com,其实我们是通过80这个端口进行请求的,我们如何将用户的请求分发到我们的集群中的不同机器呢?

    负载均衡的原理

    系统的扩展分为两种:

    1. 垂直扩展
      把单台服务器的硬件进行升级,比如把CPU的处理能力加强、内存增大,磁盘增大来以实现服务器处理速度的提升,但是不能解决大型的分布式系统的大流量,高并发,海量数据的问题。
    2. 水平扩展
      添加多台的服务器来满足大型网站的需求,多台服务器一起来承担高并发的压力,实打实的实力不够量来凑。

    负载均衡其实就把多个(很多很多那种)客户端通过统一的人口进入到分发服务器,分发服务器在通过自己定义的规则,分派给我们的集群。比如说我们的分发服务器同时接收到了9个请求,我们的集群有三台服务器A、B、C,第1,3,5个请求就分发给了A服务器;第2,4,6个请求就分发给了B服务器;第3,6,9个请求就分发给了C服务器,集群服务器再处理自己接收到的请求,处理完了之后在把响应给分发服务器,再返回给客户端,这就是负载均衡。

    IIS下实现负载均衡

    由于我的资源有限,只有两台机器,192.168.3.21:80服务器作为分发服务器;192.168.3.32:80服务器作为集群服务器。得到的效果就是访问192.168.3.21:80会把请求分发给192.168.3.32:80,话不多说直接进入正题。

    1. 安装ARR(Application Request Routing)
      下载地址: https://www.iis.net/downloads/microsoft/application-request-routing
      在这里插入图片描述
      安装完成后IIS的网站下方会多出一个Server Farms,如图:
      在这里插入图片描述

    2. 创建一个新的Server Farms

      鼠标右键点击 Create Server Farms,会来到Create窗口,如图:
      在这里插入图片描述
      我们给Server Farms命名为testServer,点击下一步,会来到添加服务器的窗口,如图:Advanced setting

      在这里插入图片描述
      点击完成会弹出一个确认框,如图:
      在这里插入图片描述
      这样就完成了完成了Server Farms的创建,如图:
      在这里插入图片描述

    3. 看效果
      为了看效果我在192.168.3.21:80服务器上挂了一个简单的网站,里面有一张图片:
      在这里插入图片描述
      然后我再在192.168.3.21:80分发服务器也同样挂了一个简单的网站,一张图片:
      在这里插入图片描述
      看效果,我们请求的是192.168.3.21/static/test.png,响应的确是192.168.3.32:80服务器的图片

    在这里插入图片描述
    就这样IIS实现负载均衡就实现了。

    IIS+Nginx实现负载均衡、反向代理

    说实话IIS的负载均衡不怎么样,实在难用,限制了很多地方(比如分发服务器不能分发到同一集群服务器的不同端口),这里我提供一套方案便可以实现,就是IIS+Nginx。接下来我们再看看IIS+Nginx如何实现负载均衡、反向代理。

    什么是反向代理

    代理分为两种:反向代理与正向代理

    反向代理就是外网服务器就是接收到的请求后,在映射到内网服务器上,对于客服端来说不知道具体哪台服务器来处理了他发送过来的请求。
    在这里插入图片描述

    所以反向代理的作用
    (1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
    (2)负载均衡,通过反向代理服务器来优化网站的负载

    正向代理就是代理服务器接收到请求之后,会把请求地址,及请求参数再去访问目标服务器,获取到响应之后再把响应给客服端,完成正向代理。对与目标服务器来说这个具体的请求不知道是谁发送的。

    在这里插入图片描述
    所以正向代理的作用
    (1)访问原来无法访问的资源,如google
    (2) 可以做缓存,加速访问资源
    (3)对客户端访问授权,上网进行认证
    (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

    Nginx的反向代理

    这篇文章我讲的是Windows下的Nginx,与Linux下的Nginx大同小异。

    1. 下载Nginx
      下载地址:http://nginx.org/download/nginx-1.9.3.zip
      下载后解压出来后目录结构如下:
      在这里插入图片描述

    2. 更改配置文件
      进入conf文件,找到nginx.conf文件,更改配置,配置文件具体项起到什么作用在此不提,附上一篇文章,想知道的可以去看看。
      https://blog.csdn.net/tjcyjd/article/details/50695922

      以下是我的配置如图:
      在这里插入图片描述

    3. 启动Nginx
      双击nginx.exe便可以运行
      如果运行之后配置文件有更改可以执行如下命令重新加载配置文件

    nginx.exe -s reload
    

    如何用IIS+Nginx实现反向代理

    如我们的N的配置文件来说我的目标是192.168.3.21:80作为我们的分发服务器用来分发和反向代理。192.168.3.21:8001、192.168.3.32.8001、192.168.3.32.8002 是我们的集群,Nginx能实现分发到同一服务器的不同端口,话不多说进入实操。
    为了体现效果,我们在192.168.3.21:8001、192.168.3.32.8001、192.168.3.32.8002上都挂一个简单的网站里面都有一个简单的test.txt文件,内容为各自的服务器IP与端口。
    在这里插入图片描述

    接下来看效果:
    第一次请求192.168.3.21:80
    在这里插入图片描述
    第二次请求192.168.3.21:80
    在这里插入图片描述
    第三次请求192.168.3.21:80
    在这里插入图片描述
    三次请求根据分配规则,平均的分配给了192.168.3.21:8001、192.168.3.32.8001、192.168.3.32.8002,这样我们反向代理+负载均衡就实现了。

    总结

    我们在建设网站的过程中,碰到服务器已经满足不了用户的需求,请求的速度已经跟不上的时候,我们可以用IIS+Nginx来解决这一问题。但是在反向代理+负载均衡下也会随之诞生出些许问题,比如session如何保持等,但是也不是没有办法保持,这个留到下次讲。

    展开全文
  • 由于客户访问量逐渐增多,单一个WEB站点(MVC、WebApi)响应越来越慢,由于我们的业务都是采用.NET Web应用程序部署托管在IIS上,那么如何实现我们流量的削峰谷平,应用程序的横向扩展,从而来提高单台WEB站点的吞吐量...
  • 用Nginx做反向代理实现负载均衡

    千次阅读 2012-05-18 17:17:33
    本文力求用最简的例子来演示如何使用Nginx做反向代理实现负载均衡。 实现目标:用Nginx的80端口负载均衡本机8001和8002两个http服务。 开始: 1、安装Nginx。 不多说了,直接进入下一步,配置Nginx。
  • 这里来试验下nginx的反向代理反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,...
  • >另外一个功能就是作为反向代理服务器实现负载均衡 (如下我们就来举例说明实际中如何使用nginx实现负载均衡)。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合...
  • 2、另外一个功能就是作为反向代理服务器实现负载均衡     以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了   Apa...
  • 如何利用Nginx的反向代理实现负载均衡

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 400
精华内容 160
关键字:

反向代理如何实现负载均衡