一、Tomcat为什么需要与apache、nginx一起结合使用?
Tomcat虽然是一个servlet和jsp容器,但是它也是一个轻量级的web服务器。它既可以处理动态内容,也可以处理静态内容。不过,tomcat的最大优势在于处理动态请求,处理静态内容的能力不如apache和nginx,并且经过测试发现,tomcat在高并发的场景下,其接受的最大并发连接数是由限制的,连接数过多会导致tomcat处于"僵死"状态,因此,在这种情况下,我们可以利用nginx的高并发,低消耗的特点与tomcat一起使用。因此,tomcat与nginx、apache结合使用共有如下几点原因:
1、tomcat处理html的能力不如Apache和nginx,tomcat处理静态内容的速度不如apache和nginx。
2、tomcat接受的最大并发数有限,接连接数过多,会导致tomcat处于"僵尸"状态,对后续的连接失去响应,需要结合nginx一起使用。
通常情况下,tomcat与nginx、Apache结合使用,nginx、apache既可以提供web服务,也可以转发动态请求至tomcat服务器上。但在一个高性能的站点上,通常nginx、apache只提供代理的功能,也就是转发请求至tomcat服务器上,而对于静态内容的响应,则由前端负载均衡器来转发至专门的静态服务器上进行处理。其架构类似于如下图:
在这种架构中,当haproxy或nginx作为前端代理时,如果是静态内容,如html、css等内容,则直接交给静态服务器处理;如果请求的图片等内容,则直接交给图片服务器处理;如果请求的是动态内容,则交给tomcat服务器处理,不过在tomcat服务器上,同时运行着nginx服务器,此时的nginx作为静态服务器,它不处理静态请求,它的作用主要是接受请求,并将请求转发给tomcat服务器的,除此之外,nginx没有任何作用。
二、tomcat的连接器协议
tomcat和前端web服务器(nginx或Apache)之间的通信时靠连接器协议来完成的,tomcat共支持4中连接器协议,分别为:
1) HTTP连接器
2) SSL连接器
3) AJP 1.3连接器
4) proxy连接器(好像这个没用了)
也可以归档为支持2种连接器协议:AJP和HTTP,它们用来在Web服务器和Tomcat之间进行数据传输,并提供相应的控制命令。
AJP(Apache JServ Protocol)协议
目前正在使用的AJP协议的版本是通过JK和JK2连接器提供支持的AJP13,它基于二进制的格式在Web服务器和Tomcat之间传输数据,而此前的版本AJP10和AJP11则使用文本格式传输数据。由于这种协议是二进制的,因此在处理请求时的效率比http协议要高。目前常用AJP协议的版本是1.3,它主要有以下特征:
1) 在快速网络有着较好的性能表现,支持数据压缩传输;
2) 支持SSL,加密及客户端证书;
3) 支持Tomcat实例集群;
4) 支持在apache和tomcat之间的连接的重用,不适用于与nginx通信;
HTTP协议:诚如其名称所表示,使用HTTP或HTTPS协议在Web服务器和Tomcat之间建立通信,此时,Tomcat就是一个完全功能的HTTP服务器,它需要监听在某端口上以接收来自于前端服务器的请求,对于动态请求需要转交给servlet容器进行处理。如果前端是nginx做代理的话,那么nginx和tomcat之间的通信只能使用http协议了,而不能使用AJP协议。
http连接器也有3种类型
Tomcat的HTTP连接器有三种:
1) 基于java的HTTP/1.1连接器,这也是Tomcat6默认使用的连接器,即Coyote;它是Tomcat作为standalone模式工作时所用到的连接器,可直接响应来自用户浏览器的关于JSP、servlet和HTML的请求;此连接器是一个Java类,定义在server.xml当中,默认使用8080端口;
2) Java开发的高性能NIO HTTP/1.1连接器,它支持非阻塞式IO和Comnet,在基于库向tomcat发起请求时,此连接器表现不俗;但其实现不太成熟,有严重bug存在;
3) C/C++开发的native APR HTTP/1.1连接器;在负载较大的场景中,此连接器可以提供非常好的性能;APR即Apache Portable Runtime,它是一个能让开发者采用与平台无关的风格的方式来开发C/C++代码本地库,它能够很好的跨Windows,;
默认tomcat的采用的是第1种连接器类型。
三、tomcat与nginx一起结合使用
tomcat与nginx为什么需要一起使用的原因就不在阐述了,前面已经说得很清楚了,这里直接给出操作步骤。
1、安装nginx
# yum -y install nginx
2、编辑并配置nginx的配置文件
本文出自 “linux学习之路” 博客,谢绝转载!
Tomcat结合Apache、Nginx实现高性能的web服务器
原文:http://xslwahaha.blog.51cto.com/4738972/1741259