美文网首页程序员
Nginx反向代理及负载均衡

Nginx反向代理及负载均衡

作者: 风_3aa7 | 来源:发表于2019-03-21 10:45 被阅读0次

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配置反向代理的情况:

image.png
上面这个配置是在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要保证不能重复

下图是我的文件配置:

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

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模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态有如下几种:

image.png
配置实例解释:
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秒钟之后继续重试

相关文章

  • nginx

    nginx的配置、虚拟主机、负载均衡和反向代理一nginx的配置、虚拟主机、负载均衡和反向代理二nginx的配置、...

  • 负载均衡

    Nginx代理中的负载均衡 提到Nginx的反向代理,不得不提的就是Nginx的负载均衡,Nginx支持丰富的负载...

  • ngnix反向代理服务和负载均衡

    编辑nginx.conf nginx实现负载均衡 反向代理

  • 2020-03-31 Nginx反向代理与动静分离集群架构应用实

    1. Nginx负载均衡配置实战 1.1 Nginx负载均衡反向代理相关实践 1.1.1 实现为WWW服务代理 (...

  • 负载均衡之lvs

    1.负载均衡 VS 反向代理区别 1.1 功能(原理) 负载均衡 lvs 请求做转发 反向代理 Nginx Hap...

  • linux学习--week17--nginx-lnmp

    负载均衡2.1 负载均衡与反向代理区别2.2nginx 7层负载2.3 nginx 7层负载2.4 nginx 4...

  • Linux运维-day56/57-负载均衡之lvs

    一、负载均衡与反向代理的区别 1.1 功能(原理) 负载均衡lvs---请求做转发 反向代理Nginx Hapro...

  • 负载均衡与lvs

    一、负载均衡与反向代理的区别 1.1 功能(原理) 负载均衡lvs---请求做转发 反向代理Nginx Hapro...

  • Nginx反向代理服务器+负载均衡

    nginx反向代理服务器+负载均衡 用nginx做反向代理和负载均衡非常简单, 支持两个用法 1个proxy, 1...

  • Nginx应用场景

    反向代理,负载均衡,动静分离 1.反向代理 修改nginx配置,并重新加载 重新加载nginx配置./nginx ...

网友评论

    本文标题:Nginx反向代理及负载均衡

    本文链接:https://www.haomeiwen.com/subject/xcctvqtx.html