Apache和Tomcat实现泛域名解析的配置尝试

Apache和Tomcat实现泛域名解析的配置尝试,你想让自己的服务器为每个会员提供一个独立的二级域名吗?比如aa.test.com

bb.test.com/blog

当然aa、bb都是你的一个会员而已

/**本来复制与http://www.itwis.com/html/java/javarest/20080521/1523.html*/

1安装apache,tomcat和mod_jk部分我就不说了,如果你不能使用它们,请参考其它教程

2相关的配置文件

httpd.conf

#去掉这个前面的#,启用它

LoadModulerewrite_modulemodules/mod_rewrite.so

#启用jk,同时配置参数

LoadModulejk_modulemodules/mod_jk.so

JkWorkersFileD:/Apache2.2/conf/workers.properties

JkLogFiled:/Apache2.2/logs/mod_jk.log

JkLogLevelinfo

#JkLogLeveldebug

JkLogStampFormat"[%a%b%d%H:%M:%S%Y]"

JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories

JkRequestLogFormat"%w%V%T"

JkMount/servlet/*myloadbalancer

JkMount/*.jspmyloadbalancer

#虚拟主机,这里模拟了a.test.com和b.test.com以及a.tst.com/blog的调用

<VirtualHost_default_:80>

[email protected]

DocumentRootD:Apache2.2htdocs

ServerNameall-sites

ErrorLoglogs/all-sites-error.log

CustomLoglogs/all-sites-access.logcommon

RewriteEngineOn

#下面四行实现动态解析

RewriteCond%{HTTP_HOST}^[a-z0-9-]+.test.com$

RewriteRule^/(.*)$/%{HTTP_HOST}/$1

RewriteRule^/([a-z0-9-]+).test.com/?$/index.jsp?u=$1[L,PT]

RewriteRule^/([a-z0-9-]+).test.com/blog(/(.*))?$/blog.jsp?u=$1&$3[L,PT]

<Directory"D:Apache2.2htdocs">

OptionsFollowSymLinks

AllowOverrideNone

Orderallow,deny

Allowfromall

</Directory>

</VirtualHost>

workers.properties

worker.list=myloadbalancer

worker.tomcat1.type=ajp13

worker.tomcat1.host=localhost

worker.tomcat1.port=8009

worker.tomcat1.lbfactor=1

worker.myloadbalancer.type=lb

worker.myloadbalancer.balance_workers=tomcat1

worker.status.type=status

server.xml

去掉前后的<!--和-->启用8009端口

<Connectorport="8009"

...

3说明一下

在httpd.conf里面启用了rewrite_module,和mod_jk,并配置了与tomcat的连接配置。

虚拟主机的配置是关键

ServerNameall-sites

可以修改为

ServerNametest.com

ServerAlias*.test.com

这样可以明确指定这个虚拟主机负责的域名

urlRewrite配置部分

1.RewriteCond%{HTTP_HOST}^[a-z0-9\-]+\.test\.com$

2.RewriteRule^/(.*)$/%{HTTP_HOST}/$1

3.RewriteRule^/([a-z0-9\-]+)\.test\.com/?$/index.jsp?u=$1[L,PT]

4.RewriteRule^/([a-z0-9\-]+)\.test\.com/blog(/(.*))?$/blog.jsp?u=$1&$3[L,PT]

第一行,声明这个重写只对主机名(%{HTTP_HOST})类似XXXX.test.com感兴趣,那个是正则的

第二行,将所有的对此域名的请求进行第一次改写,比如

a.test.com改成

/a.test.com

b.test.com/blog改成

/b.test/com/blog

第三行,对无参数的访问进行调整

将/a.test.com改成

/index.jsp?u=a

第四行,对有参数路径的进行调整

将/b.test.com/blog改成

/blog.jsp?u=b

如果还有参数比如

b.test.com/id=3则最终改写为

/b.test.com/id=3

/blog.jsp?u=b&id=3

相关推荐