Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139204
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 770
  • 用 户 组: 普通用户
  • 注册时间: 2017-11-04 11:19
文章分类

全部博文(70)

文章存档

2018年(69)

2016年(1)

我的朋友

分类: LINUX

2018-09-01 16:32:53

第五章    Tomcat

1  初识tomcat

TomcatApache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由ApacheSun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上TomcatApache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

Tomcat最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O'Reilly出版的介绍Tomcat的书籍的封面也被设计成了一个公猫的形象。而TomcatLogo兼吉祥物也被设计成了一只公猫。

当配置正确时,Apache HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,TomcatIISWeb服务器一样,具有处理HTML页面的功能,另外它还是一个ServletJSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0

 

2  Tomcat Server 的组成部分说明

1 Server

Server元素代表了整个Catalinaservlet容器

2Service

Service是一个集合,它是由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求

3Connector

一个Connector在某个指定端口上监听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户

Tomcat有两个典型的Connector,一个直接监听来自Browserhttp请求,一个监听来自其他webserver的请求

4Engine

Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名

Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理,Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给默认Host来处理

5Host

代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配。每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context ,有一个Context path

Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理,匹配的方法是“最长匹配”,所以一个pathContext将称为该Host的默认Context

所有无法和其他Context的路径名匹配的请求都将最终和默认的Context匹配

6Context

一个Context对应于一个Web Appliaction,一个Web Appliaction由一个或多个Servlet组成

 

3   实验

-----------ReProxy-------------------------Client-----------

 

192.168.56.202 nginx     192.168.56.200 Tomcat

192.168.56.201 Tomcat

 

1、配置 Tomcat:注:Client 两个客户端配置相同

安装 JDK

[root@localhost ~]# tar -zxvf jdk-7u65-linux-x64.gz

[root@localhost ~]# mv jdk1.7.0_65/ /usr/local/java

[root@localhost ~]# which java

[root@localhost ~]# rm -rf /usr/bin/java        //删除 redhat 集成的 java

[root@localhost ~]# ln -s /usr/local/java/bin/* /usr/bin/

[root@localhost ~]# java -version

[root@localhost ~]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

 

[root@localhost ~]# source /etc/profile.d/java.sh

[root@localhost ~]# echo $PATH

[root@localhost ~]# java -version

 

安装 Tomcat

[root@localhost ~]# tar -zxvf apache-tomcat-7.0.54.tar.gz

[root@localhost ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat7

[root@localhost ~]# /usr/local/tomcat7/bin/startup.sh

[root@localhost ~]# netstat -anput | grep 8080

[root@localhost ~]# mkdir -p /web/kgc

[root@localhost ~]# vim index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

JSP test1 page

<% out.println("Welcome to test site,");%>

 

[root@localhost ~]# vim /usr/local/tomcat7/conf/server.xml

Host 标签内添加:

 

[root@localhost ~]# /usr/local/tomcat7/bin/shutdown.sh   //关闭服务

[root@localhost ~]# /usr/local/tomcat7/bin/startup.sh        //开启服务

 

2、配置 Nginx 反向代理

安装 Nginx

[root@localhost ~]# yum install pcre-devel zlib-devel -y

[root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

[root@localhost ~]# make && make install

[root@localhost ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

[root@localhost ~]# nginx -t   //初始化 nginx

[root@localhost ~]# nginx      //启动 Nginx

[root@localhost ~]# netstat -anput | grep 80

[root@localhost ~]# vim nginx.conf

动静分离:

location ~ \.jsp$ {

proxy_pass 192.168.56.200:8080;

}

测试:        访问 Nginx 提供的静态页面

/index.jsp    访问 Tomcat 提供的 JAVA 动态页面

 

Tomcat 集群 cluster

http 模块内--定义服务器

upstream myCluster {

server 192.168.56.200:8080 weight=5;

server 192.168.56.201:8080;

}

server 模块内--定义集群

location ~ \.jsp$ {

proxy_pass //于上面 cluster 定义名称相同

proxy_redirect off;

proxy_set_header Host $host;       //返回主机名

proxy_set_header X-Real-IP $remote_addr;  //真实 ip

proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for;       //启动转发

}

 

测试:/index.jsp        刷新页面后会反复出现 server1 server2

 

企业动静分离写法:

location ~*\.(html|gif|jpg|jpeg|ico|swf|htm|xml)$ {

proxy_pass

}

location ~ .*.jsp$ {

index index.jsp;

proxy_pass #来自 jsp 请求交给 tomcat处理

proxy_redirect off;

proxy_set_header Host $host;       #后端的 Web 服务器可以通过 X-

Forwarded-For 获取用户真实 IP

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-

For $proxy_add_x_forwarded_for;

client_max_body_size 10m;   #允许客户端请求的最大单文件字节数

client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数

proxy_connect_timeout 90;  #nginx 跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)

proxy_buffer_size 4k;     #设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffers 6 32k;       #proxy_buffers 缓冲区,网页平均在32k 以下的话,这样设置

proxy_busy_buffers_size 64k;#高负荷下缓冲大小

proxy_buffers*2 proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从 upstream 服务器传

}

location ~ .*\.(gif|jpg|png|bmp|swf)$  # nginx 处理静态页面

{

expires 30d;    #使用 expires 缓存模块,缓存到客户端 30

}

location ~ .*\.( jsp|js|css)?$

{

expires 1d;

}

error_page       404  /404.html;       #错误页面

error_page       500 502 503 504     /50x.html;

location = /50x.html {

root html;

}

 

4、性能测试

下面我们使用的 ab 压力测试工具,模拟发起一次 1 万的并发请求,使用的 index.html页面是百度首页代码

主要参数说明:

Requests per second:平均每秒处理事务数

Time per request:平均事务响应时间

Tranfer rate:平均每秒吞吐量

经上面测试得出:nginx 每秒能请求 6000 次,而 tomcat 只请求 1000 次。

nginx 每秒吞吐量是 3.6Mtomcat 每秒吞吐量 0.6M

由此看来,nginx tomcat6 倍的处理能力,如果网站程序静态页面多的话,就应该考

虑使用 Nginx Tomcat 整合来使用。

阅读(1170) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~