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>
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