菜鸟笔记

Menu

nginx+tomcat 实现动静分离和负载均衡

动静分离总的来说就是把请求到服务端的动态请求和静态资源的请求分离开,这样在请求量很大的时候能够缓解服务端的压力。之前项目需要用到 nginx 和 tomcat 结合来实现动静分离和负载均衡,在这里整理一下做为总结。

动静分离原理

服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。

如下图所示(图画的有点丑,将就着看看),我们在机器上同时安装了nginx和tomcat,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在tomcat的webroot目录下面,当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。

b0d887aacf05b3b5ea74018b66a6039c989668c3

动静分离的实现

注:本文是在 centos-6.5 64 位操作系统搭建的

环境安装

首先下载 jdk、tomcat 和 nginx 的安装包,可到各大官网下载,这里我的jdk用的是1.7版本,tomcat 用的是8.0版本,nginx 用的是1.7.7版本。

 jdk 安装

在最后加入以下几行:

执行下面命令立即生效

tomcat 安装

tomcat 安装后不用做配置,但是要测试是否能跑起来,这里不做过多的描述
nginx 安装

nginx需要编译,所以发现无法编译,那么可能是机器没有安装编译环境,需要安装编译环境,执行如下命令:

配置动静分离

这里主要是配置 nginx 的nginx.conf 文件,nginx 的配置可以参考网上其他资料,这里不做详细描述。

进入 /usr/local/nginx/conf/ 目录,编辑 nginx.conf 文件

这里我们主要修改的是http模块里面的server节点,其他配置不用改,配置如下:

其中 listen 表示nginx监听的端口,server_name是nginx对外提供访问的ip或者域名,root是nginx存放资源的路径。

下面的两个 location 节点就是动静分离的配置了,location有下面6种匹配方式:

这里我们用第4种 ~ ,使用正则表达式,并且大小写敏感,第一个 location 表示以 .jsp 结尾的请求,我们利用反向代理的方式,把请求转发给tomcat进行处理,其中 proxy_pass 需要配置tomcat的ip。我们也可以配置restful api形式的请求,例如我们想把请求接口的 url 里面带有字母 a 的请求转发给 tomcat 进行处理,我们可以配置 location ~ a 即可。

第二个location表示以 .gif .jpg .js 等结尾的请求,我们直接到nginx的root目录里面获取资源,这定义用户浏览器缓存的时间为10天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力。

至此,我们已经配置好动静分离了,启动nginx和tomcat就可以了。

负载均衡的实现

配置好动静分离,那么负责负载也就很简单了。负载均衡就是将 tomcat 的动态请求分摊到多个 tomcat 执行,这个在请求量很大的时候能缓解服务端的压力,主要的配置是在 nginx.conf 的配置文件的http节点里面添加 upstream 节点,如下:

其中,upstream 节点里面配置的是每个参与负载均衡的tomcat的ip, weigth 参数表示权值,权值越高被分配到的几率越大,如果每台机器的weight=1,表示每台机器被分配到的概率是一样的。tomcats是upstream配置项的名称,可以自定义,但是一定要和locatin节点里面的 proxy_pass 配置一样

至此,我们已经把动静分离和负载均衡配置好了。

文章来源:Nginx+tomcat实现动静分离和负载均衡

— 于 共写了2009个字
— 文内使用到的标签:

一条回应:“nginx+tomcat 实现动静分离和负载均衡”

  1. 最美微笑说道:

    缓解服务端的压力,会给公司减少很多麻烦和金钱

发表评论

电子邮件地址不会被公开。 必填项已用*标注