我们在运行一个简单的项目时,随便捞一个运用广泛的服务器即可,前端、后台一股脑丢给服务器就能搞定,而且所要处理的业务也不多看不出有什么差别。但是呢,当我们运行较大型的项目时,不光要考虑请求并发、服务器负载问题,我们还要考虑请求的处理速度。这就要来说说今天的Nginx+TomCat集群了。
1,Nginx: 处理静态资源较快(html、js、css、图片等); TomCat: 适合处理后台请求 ; OK, 那就让动静请求分开,各自发挥自己的长处岂不是很美!
2,至于服务器负载问题,俗话说人多力量大,就多来点TomCat服务器呗。(而且挂了一个也不影响 ~.~)
来两张图直观的看看吧:
一、来进入正题吧,先说下实施原理:
1, Nginx 像一个网关一样,作为所有请求与响应的进出口,接受所有用户请求,并返回所有后台响应。
2, Nginx 接收到请求之后判断,静态请求自己处理,动态请求交个TomCat服务器集群处理。
3, TomCat服务器集群接收到请求之后,会轮换制进行处理
4, 请求处理后交由Nginx返回
二、具体实施:
一般大型项目运行在Linux系统上,在W上原理一样,下边就用Linux做一个简单的例子
1、安装准备 (自行安装Centos7,三台虚拟机(分别跑Nginx服务器,和另外两台Tomcat服务器))
1.1 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装
$ yum install gcc-c++
$ yum install pcre pcre-devel
$ yum install zlib zlib-devel
$ yum install openssl openssl--devel
2、安装Nginx
安装之前,最好检查一下是否已经安装有nginx
$ find -name nginx
如果系统已经安装了nginx,那么就先卸载
$ yum remove nginx
首先进入/usr/local目录
$ cd /usr/local
从官网下载最新版的nginx
$ wget http://nginx.org/download/nginx-1.15.6.tar.gz
解压nginx压缩包
$ tar -zxvf nginx-1.15.6.tar.gz
会产生一个nginx-1.15.6目录,这时进入nginx-1.15.6目录
$ cd nginx-1.15.6
接下来安装,使用--prefix参数指定nginx安装的目录,make、make install安装
$ ./configure $默认安装在/usr/local/nginx
$ make
$ make install
如果没有报错,顺利完成后,最好看一下nginx的安装目录
$ whereis nginx
安装完毕后,进入安装后目录(/usr/local/nginx)可以启动或停止它了。
启动 ./nginx
停止 ./nginx -s stop
3、 负载均衡(动静分离配置参考Windows配置 )
编辑配置文件 vi /usr/local/nginx/conf/nginx.conf
3.1在http节点下配置如下: // 配置Tomcat集群
3.2 在server节点下配置如下:
3.3.1,over 测试一下: 在各个tomcat下部署项目test,在项目下新建index.jsp,内容如下
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户列表</title>
</head>
<body>
<%
out.println("["+request.getLocalAddr()+":" +request.getLocalPort()+"]" + "<br/>session id:" + session.getId());
%>
</body>
</html>
3.3.2 浏览器访问http://localhost/test,可以看到一次请求会把请求分发给不同的tomcat
4. 动静分离配置
4.1 在server节点下配置
#静态资源类型:图片等
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
#存放的位置
root images;
#过期时间
expires 30d;
}
#静态资源类型:js,css
location ~ .*\.(js|css)?$ {
#存放位置
root resources;
#过期时间
expires 1h;
}
4.2实验动静分离
假设test应用需要一张图片, 随便搞一张来,放到Nginx制定存放位置,在Tomcat的项目中只指向该图片相对路径,访问即可看到效果哦~