我在《Perl、PHP、ASP、JSP技术比较》 一文中曾经对四种流行的网站设计语言进行了评测和对比,常言道鱼与熊掌皆我所欲,两者不可兼得,那么有没有一种方法,可以做到鱼与熊掌兼得,同时支持这四 种语言的Web服务器呢,今天我就介绍一下基于Windows Server 2003的同时在一个80端口支持这四种语言的方法。
我们的策略是:安装三个Web服务器,Apache负责支持perl和php,IIS负责支持asp,Tomcat负责支持jsp,通过Apache的proxy_module将三个服务器集成到一个80端口。
安装的方法是,先安装IIS、Apache和Tomcat,配置Apache使用80端口,Tomcat使用8080端口,IIS使用8081端口。
接着在Apache中修改httpd.conf文件,启用proxy_module和proxy_http_module,修改的内容是:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
然后在Apache的httpd.conf文件中增加如下几行:
ProxyPass /php !
ProxyPass /asp/ http://localhost:8081/
ProxyPassReverse /asp/ http://localhost:8081/
ProxyPass /jsp/ http://localhost:8080/
ProxyPassReverse /jsp/ http://localhost:8080/
然后在<Directory>中设置各个服务所在网站的目录权限,这样php目录即可跑apache,支持php和perl,而asp目录 则跑IIS,jsp目录跑Tomcat,全部都可共享80端口,一个端口同时支持Perl、PHP、ASP、JSP四种语言,兼容性很好,性能也不错。
另外,将上述命令放在<VirtualHost>中,可以实现不同的虚拟主机使用不同的Web服务器,同一个端口同样可以跑多个Web Server,这对于那些出售虚拟主机的人来说很有用,如果你想在一台Windows服务器上配置不同的Web服务的话也可以尝试一下。
以上配置在Windows Server 2003、Apache 2.2.6、Tomcat 6.0.16、IIS 6.0的环境下调试通过,运行正常。
Win2003完美配置Apache+IIS+Tomcat多站点
本地只测试了一个asp站和一个jsp站,而实际情况是多个asp站和jsp站,又试了两次还是不行,终于在第三次尝试后搞定了,写下来做个纪念。
第一次尝试使用:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.5hope.com
DcumentRoot "G:5hope
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.5hope.com:88/
ProxyPassReverse / www.5hope.com:88/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.shundabanjia.com
DocumentRoot "G:wuyubingwww"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>
本以为这样设置多站点就搞定了,结果发现只识别第一个站点,访问别的站点都是这个站的内容,折腾了一上午,没成功。
第二次尝试使用:
<VirtualHost *:80>
#添加了这个属性**********
ProxyPreserveHost On
ServerAdmin [email protected]
ServerName www.shundabanjia.com
DocumentRoot "G:wuyubingwww"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:tomcat5.0.28confworkers.properties"
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.openria.cn
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:tomcat-5.0.28webappsria"
<Directory "D:tomcat-5.0.28webappsria">
Options Indexes FollowSymLinks
allow from all
</Directory>
</VirtualHost>
这回经过查官方资料,发现了一个属性,叫ProxyPreserveHost On,试了一下,是可以用实现多个虚拟的asp站点了,但是和我的tomcat站点定义冲突,访问不了jsp站,又不行,只好再找。
第三次尝试使用:
NameVirtualHost *:80
<VirtualHost *:80>
ProxyPreserveHost On
ServerAdmin [email protected]
ServerName www.shundabanjia.com
DocumentRoot "G:wuyubingwww"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:tomcat5.0.28confworkers.properties"
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.openria.cn
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:tomcat-5.0.28webappsria"
<Directory "D:tomcat-5.0.28webappsria">
Options Indexes FollowSymLinks
allow from all
</Directory>
</VirtualHost>
经过反复看文档,这回终于搞定了,原来是没有吧"Use name-based virtual hosting."打开,去掉NameVirtualHost *:80前面的#号就可以了,真是晕啊。
总算成功了,看来有问题还需要看官方资料,网友的资料还是不完整啊,通过自己的努力,发现新的线索:
ProxyPreserveHost On
NameVirtualHost *:80
这也是自己的收获啊,希望这些经历能帮助需要他的人。