场景:
现有一台服务器部署了两个Tomcat,一个端口8080,另一个端口8088。
并且注册了两个域名都指向了这台服务器。
改造前,只能够使用www.cooltain1.com:8080访问tomcat1, 使用www.cooltain2.com:8088访问tomcat2。
这种带端口的访问方式很不友好。
希望改造之后:
访问时不再需要带端口,
能够www.cooltain1.com 访问tomcat1
能够www.cooltain2.com 访问tomcat2
1、配置Tomcat01的 conf/server.xml
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />此处HTTP/1.1还是按原来的方式配置,这里要注意的只是AJP/1.3的配置,
tomcat01的AJP/1.3协议配置的端口是8009
2、配置Tomcat02的 conf/server.xml
<Connector executor="tomcatThreadPool" port="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />tomcat02的AJP/1.3协议配置的端口是8109
(注:以下步骤的3~9来自于原贴http://blog.youkuaiyun.com/grubbyfan/article/details/3321190,并结合本文进行一下修改)
3. 下载并安装Apache,下载地址:Apache下载
(本示例使用的版本是httpd-2.2.25-win32-x86-no_ssl.msi)
注:apache运行时,务必使用80端口。
4. 下载mod_jk,下载地址:mod_jk下载
注意:下载的mod_jk版本要与Apache版本对应。
(本示例使用的版本是tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x.zip)
5. 解压mod_jk,得到mod_jk.so文件,复制到Apache的modules目录下。
6. 修改Apache的conf目录下的httpd.conf文件,搜索“LoadModule”配置项,并在最后一条LoadModule配置项的后面加上下面的代码:
- # 加载 mod_jk 模块
- LoadModule jk_module modules/mod_jk.so
- # 指定 mod_jk 模块所需的配置文件 workers.properties 的位置
- JkWorkersFile conf/workers.properties
- # 指定 mod_jk 模块的日志文件位置
- JkLogFile logs/mod_jk.log
- # 指定 mod_jk 模块的日志级别
- JkLogLevel warn
- # 指定 mod_jk 模块的日志格式
- JkLogStampFormat "[%a %b %d %H:%M:%S %Y]
7. 在conf目录下创建workers.properties文件,内容如下:
- # Define 2 real worker using ajp13
- worker.list = tomcat01,tomcat02
- # Set properties for tomcat01 (ajp13)
- worker.tomcat01.type = ajp13
- worker.tomcat01.host = 127.0.0.1
- worker.tomcat01.port = 8009
- worker.tomcat01.lbfactor = 50
- worker.tomcat01.cachesize = 10
- worker.tomcat01.cache_timeout = 600
- worker.tomcat01.socket_keepalive = 1
- worker.tomcat01.recycle_timeout = 300
- # Set properties for tomcat02 (ajp13)
- worker.tomcat02.type = ajp13
- worker.tomcat02.host = 127.0.0.1
- worker.tomcat02.port = 8109
- worker.tomcat02.lbfactor = 50
- worker.tomcat02.cachesize = 10
- worker.tomcat02.cache_timeout = 600
- worker.tomcat02.socket_keepalive = 1
- worker.tomcat02.recycle_timeout = 300
注:在这里tomcat01与tomcat02配置的端口就是前面配置好的。
8. 在httpd.conf文件中增加虚拟主机配置
- NameVirtualHost *:80
- <VirtualHost *:80>
- ServerName www.cooltain1.com
- ServerAlias www.cooltain1.com
- ErrorLog logs/aaa-error_log.txt
- CustomLog logs/aaa-access_log.txt common
- JkMount /* tomcat01
- </VirtualHost>
- <VirtualHost *:80>
- ServerName www.cooltain2.com
- ServerAlias www.cooltain2.com
- ErrorLog logs/bbb-error_log.txt
- CustomLog logs/bbb-access_log.txt common
- JkMount /* tomcat02
- </VirtualHost>
注意一:NameVirtualHost 指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。
注意二:所有符合NameVirtualHost或<VirtualHost>标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而<VirtualHost>标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。 所以每个NameVirtualHost定义的参数至少要有一个<VirtualHost>相匹配。
注意三:如果设置NameVirtualHost 或<VirtualHost>为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自 80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。
注意四:JkMount /* tomcat01的意思是将该虚拟主机下的请求都转发给tomcat01这个worker(上面workers.properties中配置的)对应的应用
9、重启Apache, 就可以使用 www.cooltain1.com来访问tomcat01 , www.cooltain2.com访问tomcat02.
(注:上面步骤的3~9来自于原贴 http://blog.youkuaiyun.com/grubbyfan/article/details/3321190 ,并结合本文进行一下修改 )
附录:我现在还没有服务器,如何在本机做验证?
如果是window,打开文件 "C:\WINDOWS\system32\drivers\etc\hosts"
在文件未尾追加下面配置
127.0.0.1 www.cooltain1.com 127.0.0.1 www.cooltain2.com大概意思是,将访问www.cooltain1.com或www.cooltain2.com指向127.0.0.1(也就是本机啦)