设为首页 收藏本站
查看: 964|回复: 0

[经验分享] 通向架构师之路--Apache整合Tomcat

[复制链接]

尚未签到

发表于 2018-11-24 09:50:04 | 显示全部楼层 |阅读模式
一、先从J2EE工程的通用架构说起

  这是一个通用的Web即B/S工程的架构,它由:
  ü   Web Server
  ü   App Server
  ü   DB Server
  三大部分组成,其中:
  2  Web Server
  置于企业防火墙外,这个防火墙,大家可以认为是一个CISCO路由器,然后在CISCO路由器上开放了两个端口为:80和443。
  80端口:用于正常的http访问
  443端口:用于https访问,即如果你在ie里打入https://xxx.xxx.xx这样的地址,默认
  走的是443这个端口。
  WebServer专门:
  用于解析HTML、JS(JavaScript)、CSS、JPG/GIF等图片格式文件、TXT、
  VBSCRIPT、PHP等一切一切“静态”网页内容。
  2  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)    为将来的进一步的“集群扩展”打好了基础
  2  DB Server
  打比方说我们用的是Oracle,它需要通过1521与App Server进行连接是不是?那么这个1521我们称为数据库连接端口,如果把它暴露在Internet上,是不是在危险了点?就算我们的密码很复杂,但对于高明的***来说,要攻破你的口令也只是时间上的问题而己。
  因此我们把我们的DB Server也和App Server一样,置于内网的防火墙。任何的DB连接与管理只能通过内网即在公司企业内部来访问,就是这个道理。
二、动手来架构
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



  http://my.csdn.net/uploads/201206/28/1340851494_6513.jpg
  这边的server name你们要填入自己的server的真实名,不能用我这个,这个servername如:shnlap93.cts.com只能够我用,这个名称是全局唯一的,和你的IP一样。
  http://my.csdn.net/uploads/201206/28/1340851533_9763.jpg
  http://my.csdn.net/uploads/201206/28/1340851561_4353.jpg
  
  选全部安装

  装完后你会多出一个这样的图标来,点击该图标,里面有用于控制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文件,内容为:
  Hey man, apache works!
  重启我们的Apache服务,来测试一下:

  嘿嘿,我们得到了什么?禁止访问,为什么?
  找到下面这一段:
  
  Options FollowSymLinks
  AllowOverride None
  Order deny,allow
  deny from all
  
  看到了没?
  现在,把这个”deny from all”改成”allow fromall’吧。
  
  Options FollowSymLinks
  AllowOverride None
  Order deny,allow
  allow from all
  
  修改完后重启你的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
  
  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
  
  关键的是这两句:
  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本身来解析
  
  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
  
  大家看到没,所有的/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一步搞定。
三、用于实验的cbbs工程配置
  最后附上cbbs布署需要用到的配置,相关的工程可通过ftp的” /Java Architect/Project/”下的cbbs.zip来获取。
  ü   在tomcat中打开server.xml加入:
  
  和

  
    ü   手工在d盘根目录建立一个upload目录,在此目录内再建立一个image目录。
  ü   在tomcat中打开context.xml加入
  


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-638915-1-1.html 上篇帖子: CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL-CORE 下篇帖子: 通向架构师的道路(二)--之apache tomcat https应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表