通向架构师的道路(第一天)之Apache整合Tomcat


 

1、先从J2EE工程的通用架构提及

 


 

这是一个通用的Web即B/S工程的架构,它由:css

ü   Web Serverhtml

ü   App Serverjava

ü   DB Serverweb

三大部分组成,其中:spring

²  Web Serversql

置于企业防火墙外,这个防火墙,你们能够认为是一个CISCO路由器,而后在CISCO路由器上开放了两个端口为:80和443。数据库

80端口:用于正常的http访问apache

443端口:用于https访问,即若是你在ie里打入https://xxx.xxx.xx这样的地址,默认浏览器

走的是443这个端口。tomcat

         WebServer专门:

用于解析HTML、JS(JavaScript)、CSS、JPG/GIF等图片格式文件、TXT、

VBSCRIPT、PHP等一切一切“静态”网页内容。

²  App Server

置于企业防火墙内,它和Web Server之间的链接必须且必定为内部IP链接。

外部IP:即Internet IP地址,咱们的web服务器通常会有一个内部IP一个外部IP,所以在这里,咱们的App Server没有任何外部IP,只有内部IP,因此我在这边说App Server与Web Server只能之内部IP形式链接。

打比方说咱们用的是tomcat,它的端口为8080,那么这个ip地址上的8080端口只能由任何内部ip才能访问,外部的internet是访问不了的,这样作就是为了安全。

App Server用于解析咱们的任何须要Java编译器才能解析的“动态”网页,其实App Server自己也能解析任何静态网页的。

那么咱们这样来想一下:

咱们让负责专门解析静态网页的Web Server来解析html等内容,而让App Server专门用于解析任何须要Java编译器才能解析的东西,让它们“两人”各司其职。这样做的好处:

1)    为App Server“减压”,同时也提升了performance

2)    不用再把8080这个端口暴露在internet上了,也很安全,必经咱们的app server上但是有咱们的代码的,就算是编译过的代码也容易被“反编译”,这是很不安全的。

3)    为未来的进一步的“集群扩展”打好了基础

²  DB Server

打比方说咱们用的是Oracle,它须要经过1521与App Server进行链接是否是?那么这个1521咱们称为数据库链接端口,若是把它暴露在Internet上,是否是在危险了点?就算咱们的密码很复杂,但对于高明的黑客来讲,要攻破你的口令也只是时间上的问题而己。

所以咱们把咱们的DB Server也和App Server同样,置于内网的防火墙。任何的DB链接与管理只能经过内网即在公司企业内部来访问,就是这个道理。

2、动手来架构

2.1 Oracle数据加的安装与配置

DB(Oracle)我已经为你们准备好了,链接信息为:

IP:

10.225.10x.xx

Port:

1521

Username/Password:

xxx/xxx

Sid:

Jcoedb1

url:

jdbc:oracle:thin:@10.225.10x.xx:1521:xxx

因此,根据上述的架构,咱们能够把以下这样的一份清单丢给NSS或者是相关的网络管理部门,让他们给咱们开通相应的端口:

Web Server

对外IP: xxx.xxx.xxx.xxx
对内IP:10.225.xxx.xxx

向internet开通80与443端口

App Server

对内IP: 10.225.xxx.xxx

只对10.225.段的ip开放8080,8009等端口,

Db Server

对内IP: 10.225.xxx.xxx

只对10.225.段的ip开放1521端口

2.2 App Server的安装

直接解压tomcat至你的本地如:d:\tomcat,我这边用的目录名叫tomcat2,你们随意,最好名字可以越简单越好d:\tomcat或者c:\tomcat就行,不要放得太“深”。

2.3 Web Server的安装

咱们在这边将安装Apache For Win 2.2.x,它将占用你机器的80和443端口。所以若是你机器上有任何程序占用你的80和443端口,必须将它关闭掉,好比说:

咱们装有微软的IIS,这自己也是一个WebServer,那么请你将它关闭:

ControlPanel->Administrative Tools->Service,找到IISAdmin和,将它所有关闭并将启动方式设为:manual以便于不用每次重启后再要去手动关闭一下。

而后用netstat –ano找到任何还在占用80端口的程序,将它关闭掉。

2.4 开始安装Apache Http Server

咱们将安装这个版本的apache http server做为咱们从此一直使用的Web Server


 

这边的server name大家要填入本身的server的真实名,不能用我这个,这个servername如:shnlap93.cts.com只可以我用,这个名称是全局惟一的,和你的IP同样。


选所有安装

 


装完后你会多出一个这样的图标来,点击该图标,里面有用于控制apache http server的启动、中止与重启等操做选项。同时在大家的“服务”面板中,也能发现这样的一个服务项,它启动时默认是随着系统的启动而启动的,咱们把它改为“手动”吧,由于未来咱们还要安装IBM Http Server来做练习。

装完后,在Apache2.2启动的前提下,打开一个ie输入http://localhost,你将会获得这样的一个页面,就说明你的Apache的安装是成功的。


2.5 Apache的配置

 

学Java的人,必须会这个Apache的配置,要否则你怎么模拟环境、搭建环境和架构环境?光会Coding是远远不够的,你将永远只配做个码农。。。嘿嘿嘿!有不少人发觉到了后面JAVA学不上去了,关键因素在于:配置。

你会配环境了,那么你就能模拟任何客户方、开发方的环境。

你会配环境了,你的代码未来上线时才能成功运行。

你会配环境了,因此整个工程的技术核心就是你。

跟着个人教程,大家将会安装和运行达近百个各类软件与配置,搞得你一股臭味一股臭味!!

你准备好了没有?

固然,不用怕,由于个人配置都是实际运行的环境,因此网上的一些东西你能够不用去看,由于不少人都是在网上进行拷贝、复制,有时也不通过验证,会让你走不少的弯路到头来仍是落得个BUG一天世界,就看个人教程吧。

Apache的配置主要集中在httpd.conf文件,它位于你的安装目录,好比:

D:\tools\httpd\conf\

咱们用ultraedit或者相关文本编辑工具打开它,来看它的内容:

先来查找到以下这一行:

#ServerName

咱们能够获得以下这一行内容:

#ServerName shnlap93.cts.com:80

这就是咱们的主机名了,咱们能够将前面的“#”去掉,并将其改成:

ServerName 10.225.106.35:80

改完后存盘,在重启你的Apache2.2前咱们先测试一下咱们的Apache的配置文件是否改得对:


若是在你点了Test Configuration后,黑屏一闪而过,说明你的改动无误,不然这个黑屏会一直停留在当前状态,而且告诉你,你的配置改动有错,错在哪里。

从新启动你的Apache


找到以下这行:

DocumentRoot

你会发下有这样的一行内容:

DocumentRoot "D:/tools/httpd/htdocs"

这个叫做DocumentRoot即webroot,即:发布目录,发布在这个目录下的任何工程都会在Apache服务开启时被装载成标准的web工程,咱们如今动手来把这个WebRoot定位到咱们本身的发布目录中去吧。

DocumentRoot "d:/www"

咱们把它改到了d盘的www目录中去了,而后咱们在该目录中放入一个index.html文件,内容为:

<html><body><h1>Hey man, apache works!</h1></body></html>

重启咱们的Apache服务,来测试一下:


嘿嘿,咱们获得了什么?禁止访问,为何?

找到下面这一段:

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    deny from all

</Directory>

看到了没?

如今,把这个”deny from all”改为”allow fromall’吧。

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    allow from all

</Directory>

修改完后重启你的Apache服务


Ok,咱们的Apache的发布目录已经成功更改到了d:\www目录下了,咱们再来作一个实验:

咱们在IE浏览器中输入: http://localhost/css/,咱们看到了什么?


这还了得,用户若是是个初级黑客均可以知道咱们的服务器上有哪些文件,哪些目录甚至能够直接看到咱们的文件内容,怎么办?

找到下面这行

Options FollowSymLinks indexes

把它注掉改为下面这样

#Options FollowSymLinks indexes

Options None

不要急,再往下找,还有

Options Indexes FollowSymLinks

又来一个,再改掉

#Options Indexes FollowSymLinks

Options None

改完这两条后重启你的Apache服务

再次打开一个新的IE,输入:http://localhost/css/,咱们看到了以下的界面:


好了,Apache的基本配置完成了即:

1)  基本的安全配置,不容许目录访问

2)  把WebRoot改到另外一个物理目录上而不使用Apache自带的WebRoot目录

2.6 整合Apache与Tomcat

Apache(Web Server)负责处理HTML静态内容;

Tomcat(App Server)负责处理动态内容;

 

其实就是上述这样的一个架构,下面是原理

1)      Apache装有一个模块,这个模块叫mod_jk

2)      Apache经过80端口负责解析任何静态web内容

3)      任何不能解析的内容,用表达式告诉mod_jk,让mod_jk派发给相关的app server去解释。

经过上述的文字描述咱们能够得知:

1)  咱们须要在Apache中先装一个mod_jk

2)  咱们须要在httpd.conf中写点表达式

下面来实现。

1)      把mod_jk-1.2.31-httpd-2.2.3.so手工copy进咱们的Apache安装目录的modules目录下,这个文件的全名叫: mod_jk-1.2.31-httpd-2.2.3.so,你们能够从ftp上的“/JavaArchitect/mod_jk/”目录中获取,由于这个文件是我用C++在本地从新编译过的,网上下载的是src即源码,省去你们再去编译的时间了,并且一些其它网上下载的mod_jk.so是没法使用的。

2)      用ultraedit打开httpd.conf文件,跑到文件最后面加入如下几行:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JKWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

<VirtualHost *>

ServerAdmin localhost

DocumentRoot d:/www/

ServerName localhost

DirectoryIndex index.html index.htm index.jsp index.action

ErrorLog logs/shsc-error_log.txt

CustomLog logs/shsc-access_log.txt common

 

JkMount /*WEB-INF ajp13

JkMount /*j_spring_security_check ajp13

JkMount /*.action ajp13

JkMount /servlet/* ajp13

JkMount /*.jsp ajp13

JkMount /*.do ajp13

JkMount /*.action ajp13

 

JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13

JkMount /fckeditor/editor/filemanager/connectors/* ajp13

</VirtualHost>

关键的是这两句:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so

JKWorkersFile conf/workers.properties

表明:

ü   Apache载入一个额外的插件,用于链接tomcat。

ü   链接时的配置参数描述位于Apache安装目录的/conf目录下的一个叫workers.properties文件中,mod_jk通常使用ajp13协议链接,使用的是tomcat的8009端口。

3)      Worker.properties文件内容以下:

workers.tomcat_home=d:/tomcat2

workers.java_home=C:/jdk1.6.32

ps=/

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp13

4)      告诉咱们的Apache,哪些是要交给tomcat来解析,除此以外都由Apache自己来解析

<VirtualHost *>

ServerAdmin localhost

DocumentRoot d:/www/

ServerName localhost

DirectoryIndex index.html index.htm index.jsp index.action

ErrorLog logs/shsc-error_log.txt

CustomLog logs/shsc-access_log.txt common

 

JkMount /*WEB-INF ajp13

JkMount /*j_spring_security_check ajp13

JkMount /*.action ajp13

JkMount /servlet/* ajp13

JkMount /*.jsp ajp13

JkMount /*.do ajp13

JkMount /*.action ajp13

 

JkMount /*fckeditor/editor/filemanager/connectors/*.* ajp13

JkMount /fckeditor/editor/filemanager/connectors/* ajp13

</VirtualHost>

你们看到没,全部的/servlet/*都由tomcat负责解析,全部的jsp, .do, .action都由tomcat解析。

此处还有一个特殊的/fckeditor,这个是咱们使用的一个博客编辑器,这个由于是servlet的,所以也须要交给tomcat铁析。

5)      将/cbbs工程布署到tomcat的webapps目录下

6)      将/cbbs一样手工copy一份到d:/www目录下

7)      删除d:/www/cbbs/WEB-INF这个目录,嘿嘿,由于d:/www下的东西是由Apache解析的,全部的WEB-INF下的都是Java,咱们只须要布署在tomcat下便可,是否是?

8)      重启tomcat,重启Apache,在ie中直接输入: http://localhost/cbbs,使用sally/abcdefg登陆,操做一下,一切成功

Oh…yeah, tomcat+apache一步搞定。

3、用于实验的cbbs工程配置

最后附上cbbs布署须要用到的配置,相关的工程可经过ftp” /Java Architect/Project/”下的cbbs.zip来获取。

ü   在tomcat中打开server.xml加入:

<Resource

driverClassName="oracle.jdbc.OracleDriver"

factory="org.apache.commons.dbcp.BasicDataSourceFactory"

maxActive="25" maxIdle="100" maxWait="5000" name="jdbc/eltds"

password="xxx"

type="javax.sql.DataSource"

url="jdbc:oracle:thin:@10.225.101.51:1521:jcoedb1"

         username="xxx"/>

<Context crossContext="true" docBase="D:/upload" path="/uploadpic" reloadable="true"/>

<Context docBase="cbbs" path="/cbbs" reloadable="true"/>

ü   手工在d盘根目录创建一个upload目录,在此目录内再创建一个image目录。

ü   在tomcat中打开context.xml加入

<ResourceLink   name="jdbc/cbbsds"   type="javax.sql.DataSource"   global="jdbc/cbbsds"/>

相关文章
相关标签/搜索