您当前的位置:首页 > 计算机 > 服务器 > Nginx

Nginx-1.9.9 实现 负载均衡、反向代理

时间:09-12来源:作者:点击数:

了解 Nginx 虚拟主机

《Centos-7.2下使用 Nginx-1.9.9 实现虚拟主机的几种解决方案》

安装 Nginx 

《 Centos-7.2 下 Nginx-1.9.9 安装图文详解 》

一、关于 Nginx 的反向代理;

通常的代理服务器,只用于代理内部网络对 Internet 的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet

上的web服务器发起请求,最终达到客户机上网的目的。

而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,

此时代理服务器对外就表现为一个反向代理服务器。

如下图:

Nginx 作反向代理服务器只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁。

二、Nginx + Tomcat 实现反向代理

在通常情况下,实现反向代理,至少需要两个 tomcat 服务器和一个 nginx 反向代理服务器,

nginx 服务器:192.168.69.101

tomcat1 服务器:192.168.69.102

tomcat2 服务器:192.168.69.103

如下图:

由于硬件设施的限制,那么在这儿一个虚拟机上创建三个tomcat实例,模拟多个服务器,和实际生产环境大致相同。

通过访问不同的域名访问运行在不同端口的tomcat,配置内容如下图:

www.8080.com访问运行 8080 端口的 tomcat 服务器;

www.8081.com访问运行 8081 端口的 tomcat 服务器;

www.8082.com访问运行 8082 端口的 tomcat 服务器;

这儿给个工具比较使用的工具,SwitchHosts ! 是一个管理、切换多个 hosts 方案的工具。它是一个免费开源软件。

下载地址:https://github.com/oldj/SwitchHosts/releases

谢谢支持!!!

下载完成后,以管理员身份安装和运行,如果安装 360 杀毒软件的可能标识为病毒,手动授权即可正常使用!

在本地 Host 文件中进行配置,如下图:

配置 Nginx 的反向代理,输入命令 “ vi vi conf/nginx.conf ” ,键入内容如下:

    upstream tomcat_001 {
		server 192.168.78.141:8080;
    }
	
    upstream tomcat_002 {
		server 192.168.78.141:8081;
    }
	
	upstream tomcat_003 {
		server 192.168.78.141:8082;
    }
	
    server {
        listen       80;
        server_name  www.8080.com;
        location / {
            proxy_pass   http://tomcat_001;
            index  index.html index.htm;
        }  
    }
	
    server {
        listen       80;
        server_name  www.8081.com;
        location / {
            proxy_pass   http://tomcat_002;
            index  index.html index.htm;
        }
    }
	
    server {
        listen       80;
        server_name  www.8082.com;
        location / {
            proxy_pass   http://tomcat_003;
            index  index.html index.htm;
        }
    }

如下图:

测试反向代理,请求访问 www.8080.com 域名通过 nginx 代理访问 tomcat_001,如下图:

测试反向代理,请求访问 www.8081.com 域名通过 nginx 代理访问 tomcat_002,如下图:

测试反向代理,请求访问 www.8082.com 域名通过 nginx 代理访问 tomcat_003,如下图:

三、关于 Nginx 负载均衡

负载均衡是建立在现有网络结构之上的,它提供了一种廉价的有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器负载均衡系统,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器负载均衡系统中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器负载均衡系统中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。

结论:

正向代理 -> 代理的是用户。

反向代理 -> 代理的是服务器。

四、Nginx + Tomcat 实现负载均衡

Nginx 实现反向代理的结构图,如下:

根据上图所示的需求在 nginx.conf 文件中配置负载均衡,内容如下:

    

   upstream tomcat_pool {
                server 192.168.78.141:8080;
                server 192.168.78.141:8081;
                server 192.168.78.141:8082;
    }


    server {
        listen       80;
        server_name  www.baity.com;
        location / {
            proxy_pass   http://tomcat_pool;
            index  index.html index.htm;
        }
    }

配置详解:

1、down

表示当前的 server 暂时不参与负载,并且该服务器不提供任何服务;

2、weight

默认为 1,权重值越大,在整个负载均衡系统中提供请求处理的几率就越大;

3、max_fails

允许请求失败的次数,默认为 1,当超过最大失败次数时,将返回 proxy_next_upstream 模块定义的错误解决方案;

4、fail_timeout

当 max_fails 超过最大失败次数后,设置 Tomcat服务器 暂停的时间; 

5、backup

在一个 Tomcat 负载均衡系统中,当所有的 Tomcat 服务器处于处理用户请求的状态中时,此时进来的请求将交由定义为 backup 的 Tomcat 服务器提供请求处理的服务。

如下图:

在本地 Host 文件中进行配置,如下图:

测试 Nginx + Tomcat 的负载均衡,注意观察端口变化情况,如下图:

在这儿就只测试轮询(默认不跟参数)了,在实际的生产环境中,可以根据使用情况进行参数的配置和调整。

关于负载均衡的各种实用方式

1、轮询(默认)

每个请求顺序分配到不同的 Tomcat 服务器,如果其中某台服务器宕机,则该服务器不再参与轮询。

upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
}

2、weight (权重)

配置权重后,将决定 Tomcat 服务器提供服的几率,权重的值越大,提供处理请求的几率就越大,主要解决了硬件设施导致服务器性能的不均匀,这个就可以根据实际情况进行均衡分配。

upstream tomcat_pool {
	server 192.168.78.141:8080 weight=3;
	server 192.168.78.141:8081 weight=2;
	server 192.168.78.141:8082 weight=1;
}

3、fair

按负载均衡系统中请求处理响应的时间来进行分配,响应时间短的优先分配。

upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
	fair;
}

4、ip_hash

配置了 ip_hash 指令后,当用户请求服务器时,nginx 会将该请求通过哈希算法,自动按访问 ip 的 hash 结果分配到该服务器,这样就固定某个 Tomcat 服务器为某个用户提供固定的请求处理。

主要解决了当用户服务器后,再次访问时被分配到其它服务器处理请求时,再次需要登陆的问题, ip_hash 主要作用是根据 ip 来维持 session 的 (当然,这个可以使用 Tomcat 自带的 session 共享实现,但是当负载均衡系统较大时,session 共享就不太适合了  或者 也可以使用 memcached 来实现 session 共享,这样就无需担心 session 掉线了,这个需要架构师对系统的一个权衡了 )。

upstream tomcat_pool {
	ip_hash;
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
}

5、url_hash

配置 url_hash 指令后,当用户请求服务器时,nginx 会将该请求通过哈希算法,自动按访问 url 的 hash 结果固定到该服务器,url_hash 的优点是能够提高负载均衡系统的服务效率,比如提高 squid(高性能的代理缓存服务器) 的效率,

但是缺点是当负载均衡系统中某台服务器宕机的时候,url_hash 不会自动跳转的其他缓存服务器,而是返回给用户一个503错误,这是最尴尬的地方,不知道现在有没有改进这点,持续关注中。。。

upstream tomcat_pool {
	server 192.168.78.141:8080;
	server 192.168.78.141:8081;
	server 192.168.78.141:8082;
	hash $request_uri;
	hash_method crc32;
}

好了,关于 Nginx-1.9.9 实现 负载均衡、反向代理 就写到这儿了,如果还有什么疑问或遇到什么问题,可以给我留言。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐