linux+nginx+tomcat通过反向代理实现负载均衡

最近在看一本关于JavaWeb实现网站分布式架构的书,里面提到了通过负载均衡,可以避免由于大规模访问所导致的服务器瘫痪或者由于单一服务器造成的唯一一台服务器故障后,导致用户无法访问等问题。实现负载均衡的方式有很多,有硬件方式,如:F5服务器 或者 软件方式,如:lvs(Linux虚拟服务器)或Nginx。我选择了利用Nginx来实践负载均衡。

Nginx简介

nginx是通过反向代理的方式实现负载均衡,什么是反向代理呢?援引一段在百度上找到的解释,我觉得很贴切:

大家都有过这样的经历,拨打10086客服电话,可能一个地区的10086客服有几个或者几十个,你永远都不需要关心在电话那头的是哪一个,叫什么,男的,还是女的,漂亮的还是帅气的,你都不关心,你关心的是你的问题能不能得到专业的解答,你只需要拨通了10086的总机号码,电话那头总会有人会回答你,只是有时慢有时快而已。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务人的是谁。

再举个例子,当你输入www.baidu.com的时候,你并不知道你访问的具体IP是什么(当然你也不必知道),www.baidu.com就相当于一个反向代理服务器,它的背后有很多台服务器,它会通过一定的算法,指定一台“离你最近”的服务器,将你的请求发送给它。借助这种服务器集群的方式,可以大大减轻单台服务器的压力。

环境选择与搭建:

由于之前公司的项目是运行在linux上的,因此,这里我也选择在linux系统上进行操作;

web项目选择的是基于SSM框架下的maven项目;

由于是模拟,我并没有搭建两台服务器,而是在同一台服务器中,搭建了两台tomcat服务器(如何搭建两台tomcat服务器,可参考:点击打开链接);

nginx的安装相对比较复杂,因为它需要依赖很多其他环境:

1、由于nginx及其依赖的其他软件需要编译和安装,所以需要先配置c++编译环境:yum install gcc gcc-c++

2、下载openssl:wget http://www.openssl.org/source/openssl-fips-2.0.9.tar.gz

3、下载zlib:wget http://zlib.net/zlib-1.2.8.tar.gz

4、下载pcre:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz

安装这些软件的方式大同小异,这里以安装zlib为例:

1、tar zxvf pcre-8.36.tar.gz

2、cd pcre-8.36

3、./configure && make && make install

安装完之后,去nginx/sbin下运行nginx:


nginx服务器默认的运行端口是80,如果你的80端口被其他程序占用了,可以去nginx/conf下编辑nginx.conf中相关的网络配置:

listen对应的就是nginx当前监听的端口(配置完之后,一定要记得到nginx/sbin下重启nginx服务:./nginx -s reload)


至此,整个linux+nginx+tomcat的环境就搭建完毕了。

配置反向代理

在浏览器上输入对应ip和端口,出现如下,证明nginx已经部署成功了:


如果想通过nginx去代理访问服务器上对应其他端口的web项目,就需要去nginx.conf下做相应的配置:

在proxy_pass中设置需要代理访问的ip,保存退出后(wq),重启服务器。

刷新页面之后,确实nginx服务器跳转到了刚刚自己设置的ip对应的项目,不过图片、js、css样式都不能正常加载了!


通过百度才发现,原来如果需要在nginx中访问资源文件,还需要在nginx.conf进行如下配置:


重启之后:


这样,nginx代理访问单台服务器就ok了!

实现两台机器的负载均衡

同样的,还是在nginx.conf下进行配置:

先配置一个服务器集群:

然后再将nginx定向到这个服务器集群中:


重启nginx后,多刷新几次,你就会看到这样的效果:



nginx会反复切换两台不同的服务器,这就实现了最简单的负载均衡了。当然负载均衡还需要算法的配合,以后有时间再继续研究吧!


猜你喜欢

转载自blog.csdn.net/superyu1992/article/details/79914252