本次实验是在LNMP架构——OpenResty实现php缓存前移(将memcache移到nginx前端层面)基础上进行的,搭建了lnmp+memcache+openresty环境基础上进行的,接下来我将配置tomcat+jsp。
如果不配置openresty也可以进行此实验,只影响静态资源访问速率。具体配置步骤见下面链接:
文章目录
一、认识tomcat
1、什么是tomcat
Tomcat是Apache旗下的一款衍生产品,它是针对于解析.JSP动态页面而开发的一款软件,同时它也支持解析HTML静态页面。它本身也是一个WEB服务软件,我们也可以用它来发布WEB站点,不过与Apache和Nginx它并不怎么出众,相对作为一个WEB服务,它并没有太多的模块和功能,所以它一般只用于后端.JSP动态页面解析。
tomcat是一个中间件,在B/S(浏览器/服务器)模式架构中,浏览器发出的http请求经过tomcat中间件,转发到最终的目的服务器上,响应消息再通过tomcat返回给浏览器。tomcat在此过程中开启监听端口监听用户的请求,解析用户发来的http请求然后访问到你指定的应用系统,然后你返回的页面经过tomcat返回给用户。
B/S工作机制:
2、tomcat具体是怎么接收请求和处理请求(调用servlet)的呢?
在一次请求过程中:
- 服务器端监听一个端口,比如8080,然后等待请求。
- 由客户端也就是浏览器由socket套接字发起请求,然后建立连接,这个建立连接会有一个三次握手的过程,三次握手在这就不详细介绍了,然后连接建立成功。
- 客户端就开始向服务器端发送http请求,http请求携带请求数据,也就是上图中的write,
- 然后服务器端读(read)到请求数据就开始处理请求,处理完了后给客户端响应数据并回到读请求的状态。
- 客户端接收到服务器端响应的数据后客户端会展示数据,并回到发送请求的状态。
那么更重的点来了,长连接和短连接是什么呢?
http1.0协议是短连接,自从http1.1开始支持长连接。所谓的长连接并不是tcp连接,而是http连接。
长连接:
上述五个步骤之后客户端和服务器端的tcp连接并未断开,而这次http请求呢,也并未结束,而是返回到发送请求的状态,客户端依然可以使用这个http连接发送请求,换句话说就是客户端和服务器端建立完tcp连接后,多个请求可以使用一个http连接,这就是http长连接。
短连接:
如果上述五个步骤之后,客户端这个http请求并没有回到发送请求的状态,而是直接销毁,重新建立一个新的http请求连接,换句话说就是客户端和服务器端建立完tcp连接后,一个请求使用一个http连接,发一个请求就要重新建立一个新的http连接,那么这个连接就是一个短连接。
3、Apache、Nginx、Tomcat、PHP的区别
(1)Apache的优点:
- 支持模块多,功能多
- 运行稳定性强
- 支持PHP模块,无需安装其他多余的组件就可以实现.php动态页面的解析
- 地址重写功能(rewrite)强大
(2)Nginx的优点:
- 强大的抗并发能力
- 消耗主机资源小
- 非阻塞性异步功能
Apache与Nginx的区别差异:
-
异步能力:Apache中也有异步模块,支持异步功能,不过是阻塞性异步,而Nginx是非阻塞性异步。
-
多并发:Nginx因为软件体积小,异步功能,所以消耗主机资源少,抗并发能力是Apache的3倍以上。
-
稳定性:Apache算是一款老牌的WEB服务软件,发展时间长,BUG少,比Nginx更值得信赖。
(3)Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
tomcat一般是做动态解析才会用得到,支持jsp的解析,需要配置JDK支持。
(4)PHP是一个组件,用来支持WEB服务可以解析到.php动态页面。它本身并没有发布站点的功能。
3、nginx+tomcat
虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:
- 动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。
- 负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理
tomcat一般是做动态解析才会用得到,支持jsp的解析,需要配置JDK支持。
nginx,则一般是做静态,本身不具备动态解析功能,需要配置其他插件或通过其他软件协同才具备动态功能,比如php,tomcat等,但nginx在静态上的功能非常强大,也可做访问控制,而且可以做成各种协议负载服务器。
4、nginx动静态资源分离
Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。
部署nginx+tomcat+memcache实现整个网站的动静分离:
1.前端Nginx收到静态请求,直接从nginx服务器取出数据,存入memcache中,返回给客户端,第二次请求则直接访问memcache。
2.前端Nginx收到动态请求转交给tomcat服务器处理。
----如果得到静态结果存入memcache直接从memcache中取出结果交给Nginx然后返回给客户端。
----如果需要数据处理tomcat连接数据库后将结果返回给Nginx
二、部署nginx+jsp+tomcat实现动静态资源分离
实验环境
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.1.101 | lnmp+memcache+OpenResty+tomcat+jsp |
真机 | 172.25.1.250 | 客户端 |
实验
步骤一:在网上下载jdk和apache-tomcat安装包,并解压到/usr/local下
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
步骤二:创建软链接
cd /usr/local
ln -s jdk1.7.0_79/ java
ln -s apache-tomcat-7.0.37/ tomcat
步骤三:配置环境变量,加入java命令
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java #可以tab键补齐
java -version #查看java的版本
步骤四:开启tomcat
/usr/local/tomcat/bin/startup.sh
netstat -antuple | grep 8080 #查看服务开启端口
在浏览器访问http://172.25.1.101:8080
搜索动态页面http://172.25.1.101/index.jsp
由于我上一个实验openresty使用的是80端口,所以需要编辑openresty的配置文件并重启服务,这个实验的配置文件是在上一个实验的配置文件的基础上修改的
vim /usr/local/openresty/nginx/conf/nginx.conf
65 location ~ \.php$ {
66 proxy_pass http://127.0.0.1:8080;
67 }
/usr/local/openresty/nginx/sbin/nginx -s reload
刷新页面:
但这个页面的动态的jsp效果不明显,所以我们重新编辑测试页
cd /usr/local/tomcat/webapps/ROOT/
vim test.jsp
server1-The time is: <%=new java.util.Date() %>
刷新页面:
再次刷新:
发现时间会变化,实现了访问动态页面。