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

[经验分享] Apache + Tomcat 配置多个应用

[复制链接]

尚未签到

发表于 2017-1-1 10:16:53 | 显示全部楼层 |阅读模式
今天在网上发现一篇帖子 ,Apache + Tomcat 配置多个应用
转:http://www.blogjava.net/sealyu/archive/2008/08/25/224326.html
需求概况:
有2个服务:www.test.com, bbs.test.com。分别对应2个tomcat下的2个web应用。由apache httpd作为互联网接入服务器,在80端口接收对这2个服务的请求。apache httpd再将这2个请求分别对应到不同的后端web服务器(Tomcat)处理。
暂时自己还没安装成功 ,不过折腾了一天,特别是在找 mod_proxy_**.so  文件的时候
后来发现这些so文件可以自己编译生成的 ,所以和大家分享下
进入moudls目录
../apache/bin/apxs -c -i -a mod_proxy_http.c   --可以生成 mod_proxy_http.so
其他的类似 ,../apache/bin/apxs -c -i -a mod_proxy_**.c
但是生成 mod_proxy.so 的时候好像有点 不一样
../apache/bin/apxs -c -i -a mod_proxy.c proxy_util.c
下载 http://download.csdn.net/detail/bdk82924/5019862
最近在服务器上需要配置多个应用,使用apache+tomcat搭配,采用mod_jk进行分配。
刚开始在同一个tomcat中配置了多个应用,后来感觉效果不好,改为每个tomcat对应一个应用。搜索资料如下:
apache2.2与tomcat集成(可以多个tomcat)
1. 安装apache2.2 参见:http://ttitfly.javaeye.com/admin/show/127337

3.配置域名映射到本机即127.0.0.1,同时配置service域名

127.0.0.1    localhost www.test.com www.service.test.com bbs.test.com bbs.service.test.com   
127.0.0.1    localhost www.test.com www.service.test.com bbs.test.com bbs.service.test.com


4. 分别在2个tomcat里分别部署一个非常简单的应用。
第一个tomcat :端口:8080
编辑$TOMCAT_HOME/conf/server.xml
添加一个Host

<Host name="www.service.test.com" unpackWARs="true" autoDeploy="true"   
xmlValidation="false" xmlNamespaceAware="false"/>   
<Host name="www.service.test.com" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>


再在$TOMCAT_HOME/conf/Catalina下建立一个目录:www.service.test.com
然后在www.service.test.com目录下建立一个ROOT.xml,内容为:

<Context docBase="/home/mahaibo/app/test"   
privileged="true" antiResourceLocking="false" antiJARLocking="false">   
</Context>   
<Context docBase="/home/mahaibo/app/test"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

docBase指向具体的项目路径
同理第二个tomcat(端口8088)也是一样的做法:
编辑$TOMCAT_HOME/conf/server.xml
添加一个Host:

<Host name="bbs.service.test.com" unpackWARs="true" autoDeploy="true"   
xmlValidation="false" xmlNamespaceAware="false"/>   
<Host name="bbs.service.test.com" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>


然后在$TOMCAT_HOME/conf/Catalina下建立一个目录:bbs.service.test.com
再在bbs.service.test.com目录下建立一个ROOT.xml,内容为:

<Context docBase="/home/mahaibo/app/bbs"   
privileged="true" antiResourceLocking="false" antiJARLocking="false">   
</Context>   
<Context docBase="/home/mahaibo/app/bbs"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

5. 分别启动tomcat,可以通过http://www.service.test.com:8080和http://bbs.service.test.com:8088访问
6. 配置apache httpd.conf文件。
找到apach/conf/httpd.conf文件,确认下面这些文字行前面没有"#"注释号:


LoadModule proxy_module modules/mod_proxy.so   
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so   
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so   
LoadModule proxy_connect_module modules/mod_proxy_connect.so   
LoadModule proxy_http_module modules/mod_proxy_http.so   
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so   
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so


并增加虚拟主机配置:
  
NameVirtualHost *:80   
<VirtualHost *:80>   
ServerName www.test.com   
ProxyIOBufferSize 8192   
ProxyRequests Off   
ProxyVia Full   
ProxyPass / http://www.service.test.com:8080/ smax=5 max=20 ttl=120 retry=300   
</VirtualHost>   
<VirtualHost *:80>   
ServerName bbs.test.com   
ProxyIOBufferSize 8192   
ProxyRequests Off   
ProxyVia Full   
ProxyPass / http://bbs.service.test.com:8088/ smax=5 max=20 ttl=120 retry=300   
</VirtualHost>   
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.test.com
ProxyIOBufferSize 8192
ProxyRequests Off
ProxyVia Full
ProxyPass / http://www.service.test.com:8080/ smax=5 max=20 ttl=120 retry=300
</VirtualHost>
<VirtualHost *:80>
ServerName bbs.test.com
ProxyIOBufferSize 8192
ProxyRequests Off
ProxyVia Full
ProxyPass / http://bbs.service.test.com:8088/ smax=5 max=20 ttl=120 retry=300
</VirtualHost>


7.启动apache
  
./<SPAN class=hilite1>apache</SPAN>ctl start   

./apachectl start


8 可以通过访问http://www.test.com和http://bbs.test.com来分别访问2个不同tomcat下的不同应用了。


apache+tomcat配置负载均衡的网站

1.   目标
使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求:
1、 Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡。
2、 为系统设定 Session 超时时间,包括 Apache 和 tomcat
3、 为系统屏蔽文件列表,包括 Apache 和 tomcat
2.   安装 tomcat
2.1. 下载,解压 tomcat
不要下载安装版 , 下载地址
http://tomcat.apache.org
2.2. 配置 tomcat
2.2.1.     配置 server 的关闭口
我们需要在一台机器上跑 2 个不同的 tomcat ,需要修改不同的 tomcat 的关闭口,避免出现端口被占用的情况。在 server.xml 中找到 server, 将:

<Server port="8005" shutdown="SHUTDOWN">

改为

<Server port="XXXX" shutdown="SHUTDOWN">

XXXX 在这里表示不同的端口:我的两个 tomcat 分别使用 8035 , 8045
注意:这里之所以要配置不同的 tomcat 关闭口,只是因为我们使用了多个 tomcat ,其实用一个 server 多个实例也可以。
2.2.2.     配置 service
我们需要对不同的 tomcat 的 service 取不同的名字,在 server.xml 中找到:

<Service name="Catalina">

改为:

<Service name="XXXX">

两个 service 分别为 tomcat6 和 tomcat5
2.2.3.     配置 Connector
这个部分主要是要改两个 Connector ,当然前提是你的 tomcat 只有两个 Connector 。
修改 ajp1.3 的端口:
找到: <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改为: <Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" />
两个 Service 的 ajp/1.3 的端口分别为: 8019 , 8029
修改 http 的端口:
找到:

<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />

改为:

<Connector port="XXXX" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />

两个 Service 的 ajp/1.3 的端口分别为: 8060 , 8070
2.2.4.     配置 Engine
Engine 主要是配置 jvmRoute 属性,找到:
<Engine name="Catalina" defaultHost="localhost">
改为:
<Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost">
两个实例分别为: tomcat6 和 tomcat5.
2.2.5.     配置公用性 Context
如果有 Context 是多个系统公用的,比如图片等的存放地,可以做个配置:
在 Host 中增加:
<Context path="/image" docBase="D:"webRoot"image" debug="0" reloadable="false" crossContext="true">
</Context>
2.2.6.     屏蔽文件列表
打开 tomcat 目录下的 conf/web.xml ,
找到:

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

将 listings 参数改为 false;
2.3. 配置应用 (web.xml)
对系统应用做些控制。
配置 session 过期时间,大多数网站用户都只是做些浏览性的操作,为了减轻服务器负载压力,我们将 session 超时时间从默认的 30 分钟变为 5 分钟。
在 web 应用程序的 web.xml 中 servlet-mapping 之后增加如下一段:

<session-config>
<session-timeout>5</session-timeout>
</session-config>

3.   安装 Apache
3.1. 下载、安装 Apache
下载地址 http://httpd.apache.org/download.cgi
下载后点击安装 msi 文件。
安装的时候没有什么特别需要注意的地方,按照默认就行了。是否安装为 service 看具体情况而定。
3.2. 下载、安装 Apache 、 tomcat 的 Connector
http://tomcat.apache.org/download-connectors.cgi
注意,很多网站上都介绍是 JK2 ,可能是觉得 JK2 比 JK 要新吧,其实 JK2 已经停止研发了,建议使用 jk1.2 。
下载压缩包,之后将 module 目录中的 mod_jk-apache****.so 文件放入 /module/ 目录下。
3.3. 配置 Apache ( httpd.conf )
3.3.1.     配置端口:
找到
Listen 80
改为
Listen **
当然如果不需要改的话,就不用改了。正常情况无须更改。
3.3.2.     配置 DocumentRoot
找到 DocumentRoot 段,将其改为:
DocumentRoot "E:/MyWebsite"
这里的 "E:/MyWebsite" 指的是你的 web 程序的根路径,视具体应用而定。
3.3.3.     配置 serverName
找到 serverName 这个段,将其配置为你的 ServerName
如果没有配置为域名,配为 IP 也可以,此处还不是很清楚,多虚拟主机的情况的配置。
3.3.4.     配置虚拟主机
  
<VirtualHost *:80>
ServerAdmin flyffa@gmail.com
DocumentRoot       E:/MyWebsite
ServerName localhost
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/error_log
CustomLog logs/access_log common
ErrorDocument 404 /sys/logon.jsp
</VirtualHost>

3.4. 配置 JK 方式的负载均衡
3.4.1.     配置 module
我们需要与 tomcat 做连接,所以要把 tomcat 的 connector 的模块配置进去。
在 LoadModule 部分加入:
LoadModule jk_module modules/mod_jk-apache-2.0.55.so -加载模块
这个 so 是我下载的版本,个人可以根据自己下载的文件名加以配置
JkWorkersFile conf/workers.properties -指定 connector 的配置文件名称
JkLogFile logs/mod_jk.log -指定 connector 的日志文件名称
JkLogLevel info -指定 connector 的日志等级
3.4.2.     配置 worker 列表 (conf/workers.properties)
定义列表
worker.list=tomcat6,tomcat5,loadbalancer
定义一个名为 “loadbalancer” 的 worker
其作为对多个 Tomcat 进程的负载平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat5, tomcat6
( 负载平衡类型的 worker 并不与 Tomcat worker 通讯,它负责管理这些 Tomcat worker 。 )
定义多个 worker 列表

# Set properties for tomcat6 (ajp13)
worker.tomcat6.type=ajp13
worker.tomcat6.host=localhost
worker.tomcat6.port=8019
worker.tomcat6.lbfactor=50
worker.tomcat6.cachesize=10
worker.tomcat6.cache_timeout=600
worker.tomcat6.socket_keepalive=1
worker.tomcat6.reclycle_timeout=300
# Set properties for tomcat5 (ajp13)
worker.tomcat5.type=ajp13
worker.tomcat5.host=localhost
worker.tomcat5.port=8029
worker.tomcat5.lbfactor=50
worker.tomcat5.cachesize=10
worker.tomcat5.cache_timeout=600
worker.tomcat5.socket_keepalive=1
worker.tomcat5.reclycle_timeout=300

注意: lbfactor= 50 ( 当此 Tomcat worker 被用于一个负载平衡 worker 使用时,此属性将被使用。它定义了此 worker 的负载平衡权值。 )
cachesize= 10 ( 当在多线程的 web server (例如 apache2.0 、 IIS 、 Netscape )中使用 JK 时,此属性是有效的。如果将 cachesize 的值设置为较高的值,这些支持多线程的 web server 将获得很好的处理能力。如果此属性不被设置,则连接 cache 特性将失效。 )
3.4.3.     配置 Apache 到 tomcat 的桥接
在 DocumnetRoot 片段下加入

JkMount /*.jsp tomcat6
JkMount /*.do tomcat6
JkMount /*Servlet tomcat6

这里只是简单的将 apache 的请求转到其中的一个 tomcat 中,形成桥接,至于负载均衡的时候,就无须进行这步操作,直接启动负载均衡。启动负载均衡见下一节。
3.4.4.     启动负载均衡
在 DocumnetRoot 片段下加入

JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
JkMount /*Servlet loadbalancer

-指定对所有的请求启动负载均衡,这里的 loadbalancer 是定义的 worker 的名字
这里我在配置的时候犯了两个错误:
第一是没有配置 JkWorkersFile conf/workers.properties ,以为 Apache 会自动认识(其实 apache 是自动产生了一个叫做 ajp13 的 worker ,指向本机的 8009 端口)。
第二是以为 JkMount 语句中出现 loadbalancer,ajp13 之类的是系统设定的东西,其实都是在 workers.properties 文件中定义的,结果出现名字不匹配的情况。后来配置了 JkLogFile logs/mod_jk.log 之后看到错误日志才明白。
3.5. 配置 Proxy 方式的负载均衡
使用 Apache2.1 以上的版本,就可以用 mod_proxy_ajp 来完成负载均衡的配置,不过到目前为止,没有看到如何让 Apache 负责静态部分, tomcat 负责动态部分的配置方式,只能用 path 进行区分分发请求。如:在虚拟主机的配置中增加:

ProxyPass / ajp://localhost:8019/
ProxyPassReverse / ajp://localhost:8019/

而形如:

ProxyPass /*.jsp ajp://localhost:8019/
ProxyPassReverse /*.jsp ajp://localhost:8019/

这样的配置是不能通过的。

运维网声明 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-322325-1-1.html 上篇帖子: apache的相关配置 下篇帖子: Apache Commons IO入门教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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