Nginx反向代理及负载均衡

Nginx概述

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

正向、反向代理

1、正向代理(forward proxy)。一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。

2、反向代理(Reverse Proxy),以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。

下面我用Nginx来实现一个简单的反向代理加负载均衡的例子。

1、准备前提

因为实际情况一般都是多台服务器,我这里不好实现,只能在VM虚拟机里面安装两台centos 7服务器,加上本机Windows来进行模拟。

前期规划及准备工作:
Windows:安装Nginx
192.168.43.124:安装tomcat
192.168.43.45:安装tomcat

注意:保证tomcat的端口开放,能被Windows访问,验证方法是在Windows浏览器中输入http://ip:8080能访问到两台centos 7里面的tomcat页面。

2、Nginx配置反向代理

Nginx最重要的一个配置文件:nginx.conf
一般情况下所有的配置都在这里进行配置。
下面是在nginx.conf配置反向代理的情况:


上面这个配置是在window下的Nginx进行配置的,所以当正确进行以上操作后,我在Windows浏览器中输入127.0.0.1,就会自动跳转到百度首页去了,截图在这里我就不放了。

3、Nginx配置反向代理同时实现负载均衡

同样的,实现负载均衡也没增加多少难度,就是在Nginx.conf配置文件中加了最下面这一段:

upstream tomcatserver1 {
    server 192.168.43.124:8080;  
    server 192.168.43.45:8080;  
}

注意:tomcatserver1这个名字是可以随意取的,但是多个upstream要保证不能重复

下图是我的文件配置:


上面这个配置是在window下的Nginx进行配置的,所以当正确进行以上操作后,我在Windows浏览器中输入127.0.0.1,就会匹配到tomcatserver1,然后就会去找对应的upstream,读取里面参与负载的服务器信息,然后根据一定的均衡算法进行分发。具体的算法稍后进行简单介绍。所以就会跳转到tomcat的默认页面如下:

4、负载均衡调度算法

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2、weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
指定轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:

upstream servertest {  
    server 192.168.0.14:8080 weight=10;  
    server 192.168.0.15:8080 weight=10;  
}

3、ip_hash
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
每个请求按访问ip的hash结果分配,这样每个访客就固定访问一个后端服务器,该调度算法可以解决动态网页的session共享问题,但是会导致请求分配不均。 (在upstream里配置如果是ip_hash,不能有weight和bakcup)
例如:

upstream servertest {  
    ip_hash;
    server 192.168.0.14:8080;  
    server 192.168.0.15:8080;  
}

4、fair
这是比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。
fair算法会根据后端节点服务器的响应时间来分配请求,时间短的优先分配,必须下载nginx的相关模块upstream_fair,例如:

upstream servertest {  
    server 192.168.0.14:8080;  
    server 192.168.0.15:8080;  
    fair;
}

5、url_hash算法(web cache)
按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。(注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。)。例如:

 upstream servertest{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}

5、Nginx负载均衡调度状态

在Nginx的upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态有如下几种:


配置实例解释:

upstream tomcattest {
    server 192.168.43.44:8080 down;
    server 192.168.43.45:8080 backup;
    server 192.168.43.44:8080 max_fails=1 fail_timeout=10s;
}
#server 192.168.43.44:8080 down;表示第一个服务不可用,暂不参与负载均衡
#server 192.168.43.45:8080 backup;表示这个是备用服务器,当其他的负载服务器不可用时会调用备份服务器
#server 192.168.43.44:8080 max_fails=3 fail_timeout=10s;表示可用服务,但最大失败3次之后需要等待10秒钟之后继续重试
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章