实例详解tomcat组件安装+Nginx反向代理tomcat+Apache使用mod_jk和mod_proxy反向代理和负载均衡

一、Tomcat简介

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

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

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

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

二、Java环境JDK的部署

2.1、JAVA介绍

   JAVA组件主要包括四个独立却又彼此相关的技术:

   java程序语言设计、java api、java class、JVM。其中JVM是java虚拟机,不同的系统上通过部署JVM来实现java程序的解析和运行,这样就实现了java的哲学原理:一次编译、到处运行!

JVM的实现方式:

   一次解释器,解释字节并执行,是一句一句的进行解析;

   即时编译器,解释后的数据会缓存下来,需要更多的内存来缓存解释后的结果;

   自适应编译器:缓存20%的代码,提高80%左右的速度,此遵循“二八法则”!

JVM的种类:

   sun的HotSpot JVM,其包括JRE和JDK,JRE只是实现java的运行环境,而JDK中包涵了JAVA的开发环境和运行环境;

   开源的OpenJDK:其类似于JDK,也是实现开发和运行环境的组合。

JAVA根据应用领域的不同,java可分为两类    
   java SE:标准版,早先叫J2SE     
   java EE:企业版,J2EE     
   jave ME:移动版,J2ME

2.2、JAVA环境JDK安装和配置

   java环境的安装可以使rpm、通用二进制、源码编译方式进行安装,这里使用通用二进制的bin格式的包来进行安装

   使用jdk-6u21-linux-x64-rpm.bin包进行安装

   默认的安装目录是在/usr/java 目录下,其中有/usr/java/ jdk1.6.0_21/bin/目录下是java的常用命令

设置环境变量、使系统可以调用JDK环境

java的相关参数:


三、tomcat的安装和配置

3.1、tomcat的架构运行层次如下图

上图解释:

   server:在最外层,每个server就是一个tomcat实例。又叫顶级组件

   service服务:将一个和多个连接器关联到一个引擎上。一个service内部只能有一个引擎。

   Engine,引擎:servlet的实现jvm,能够解码别人发来的请求,其内部有一个web服务器,其可以工作在80端口上。定义的时候需要定义一个默认主机,来响应没有指定主机的访问。

   HOST:容器内的主机,类似apache的虚拟主机,主机可以有多了    
           Context,主机内的,类似于路径别名的定义

   连接器:将server和引擎连接起来的工具。

其配置结构如下,配置文件为server.xml


3.2、tomcat安装

此处使用最新版安装:apache-tomcat-7.0.40.tar.gz


配置文件:

所有配置文件都在tomcat的安装目录下的conf目录内

主配置文件server.xml详解

启动tomcat

   [root@localhost ~]# catalina.sh start

至此我们的tomcat已经能够起来了,访问以下网页测试以下


3.3、添加一个tomcat的服务脚本,便于管理tomcat服务


为其增加执行权限并增加至系统服务列表


关闭和启动服务就可以通过系统服务那样进行了


上面提到的管理接口的时候需要用户名和密码

在tomcat-users.xml定义用户和密码,然后通过输入用户名和密码进行认证进入管理接口


测试如下:

   此时我们通过刚才的设置,用户还没有Host Manager的权限,如果想要管理主机,可以在刚才的roles的设置里增加上admin-gui角色即可!

四、架构Nginx实现反向代理tomcat

4.1、自己先部署一个jsp的网站、方便下面的操作,使用JavaCenter_Home_2.0_GBK.tar.bz2

在server.xml内新建一个虚拟主机


由于使用的是基于主机名的虚拟主机,所以需要先能解析:


安装JavaCenter

创建数据库和用户名


安装配置以后,可以进入主页,显示如下

4.2、Nginx+tomcat实现其反向代理

架构图如下

安装并配置nginx

安装环境:

安装nginx


提供nginx的服务配置脚本


增加权限并加入服务列表


保证nginx是能正常访问

修改配置文件,让请求其连接都代理至后端tomcat服务器、并定义使用缓存来缓存静态内容


nginx.conf内只需要修改上面的内容即可,其详细解释如下图

通过以上配置我们实现了nginx反向代理tomcat的架构!测试如下:

   至此我们的nginx实现tomcat的反向代理已经搭建成功,并且实现了动态网页代理到后端tomcat服务器上,静态网页缓存到本地!

五、Apache使用mod_jk和mod_proxy反向代理tomcat

5.1基本介绍

    httpd通过mod_proxy或者mod_jk模块来对tomcat进行反向代理,而且其比Nginx的强大,Nginx的反向代理只能通过http协议进行代理,而apache既可以代理http协议,还可以代理ajp协议,而且mod_proxy 还可以实现session会话的绑定。mod_jk其开发就是对tomcat做反向代理的,通过apache反向代理tomcat的时候,我们可以在tomcat上禁止http连接器,从而来防止前端客户和tomcat通信,所有的连接都是通过apache的代理进来,这样可以增加后端主机的安全性!

5.2、环境配置和架构

Apache上网络基本配置


Tomcat1上基本网络设置和域名解析文件


Tomcat2上基本网络配置和域名解析文件


5.3、在tomcat1和tomcat2上配置java环境并设置,然后建立测试主页

   配置和设置环境上面已经详细介绍过,这里不在重述,只配置下虚拟主机和测试网页

tomcat1

虚拟主机的配置


tomcat2


设置数据库并创建用户名和设置权限


测试页面为前面搭建的jsprun,页面如下

5.4、安装配置apache

httpd-2.4.4安装依赖的较新apr-1.4.6.tar.bz2和 apr-util-1.5.2.tar.bz2,由于系统上的apr还被别软件所依赖,不能直接卸载,所以这里采用编译源码安装的方式进行

编译安装apr


编译安装apr-util


编译安装httpd


配置httpd服务,增加服务脚本


增加执行权限    

加入系统服务列表

增加环境变量


反向代理的配置


修改配置文件/etc/httpd/httpd.conf


增加虚拟主机配置

配置参数解释

   ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能。

   ProxyVia  {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加Via:;Full表示每个Via:行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via:都会被移除。

   ProxyRequests {On|Off}:是否开启apache正向代理的功能;启用此项时为了代理http协议必须启用mod_proxy_http模块。同时,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off。

   ProxyPass  [path]  !|url  [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。

重启服务,测试如下

至此我们实现了利用mod_proxy实现了一个tomcat的代理

==============================================================

下面配置下mod_jk模块进行配置实现反向代理功能

   mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。,在apache服务器上安装

编译、安装tomcat-connectors


   apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:


   对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。

配置apache实用mod_jk模块


根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:


重启httpd服务,并进行测试

[root@node1 bin]# service httpd restart

测试页面如下

   通过上面的配置和测试,现在已经实现了apache基于mod_proxy和mod_jk反向代理tomcat,下面我们通过apache和两个tomcat实现负载均衡

tomcat1上的配置

修改配置文件,增加jvmRoot的定义,这是集群中必须配置的参数

重启服务使其生效

tomcat2上的配置


两台tomcat服务器上只需要修改上面这两个参数,下面在apache上进行配置

基于mod_jk的负载均衡


编辑/etc/httpd/extra/workers.properties,添加如下内容:    


重启服务,使配置生效

[root@node1 ~]# service httpd restart

测试访问,已经代理到不同的后端 主机上了

基于mod_proxy的负载均衡

先禁用上面基于mod_jk的配置文件


配置proxy负载均衡    
在httpd.conf的全局配置中配置如下内容:


在虚拟主机中实现代理


测试结果如下

   至此实现了apache基于mod_jk和mod_proxy的负载均衡的反向代理的功能。这两个模块的配置原理大致相同,就是所使用的命令和配置位置有点小出入,需要注意下!

   由于配置过程中命令繁多,难免会出现错误,还望各位大牛们指出~~谢谢!

本文出自 “Chris On the way” 博客,请务必保留此出处http://chrinux.blog.51cto.com/6466723/1211622

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值