2007-06-12 4:20
转自:http://hi.baidu.com/zzeric/blog/item/b6ae6901aced4b0f7aec2c78
最近mCentrix组在科特迪瓦的现场发回来这么一个需求:
同一台服务器上有两个应用,如
http://hostA:8080/services和http://hostA:8080/admin
外部访问时,需要从不同的域名访问,如
http://services.host.com和http://admin.host.com
一开始给他们这么一个比较简单的解决方案:
分别把services和admin两个应用,部署到不同的两个端口上,如
services -> http://hostA:8081/
admin -> http://hostA:8082/
接着在防火墙配两个公网IP,然后dns上把services.host.com和admin.host.com配置到这两个IP上。
当请求到达防火墙时,防火墙根据所访问的ip转发到hostA的对应端口上。
前方用的防火墙是我们公司的Audemon 100,和公司的Audemon系统组的交流后得知,目前的防火墙版本不支持同时配置两个ip,要到六月底才能出版本支持。!@…%#%…%¥,晕倒,好像这是很基本的功能来的吧,居然还不支持。没办法,此路不通。由于防火墙是不管域名的(因为域名资料是通过应用层传输的),那更别指望防火墙根据域名转发了。
因此,我们只好提供了软件级的解决方案,让前方在Tomcat前加一个Apache 2.2,通过Apache的Virtual Host + AJP实现转发。
Apache的部分配置如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName host1.com
ProxyPass / ajp://host1.com:8009/
ProxyPassReverse / ajp://host1.com:8009/
</VirtualHost>
<VirtualHost *:80>
ServerName host2.com
ProxyPass / ajp://host2.com:8019/
ProxyPassReverse / ajp://host2.com:8019/
</VirtualHost>
Tomcat也需要配置AJP Connector,如host1.com的配置
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
这个方案相对于防火墙的硬件方案,性能上要差一些,但还是不错的。
另外还有一种方案是通过iptables的domain module来实现,但这个domain module好像是国内的某个高手写的,只更新到v0.02版本,并没有提交到iptables的标准里。虽然可以用而且性能比Apache的方案要高一些,但是风险较大,而且配置麻烦(既要编译内核,又要配置iptables的rules),所以没有用这种方式。
文章描述了在科特迪瓦现场遇到的需求,即同一台服务器上部署了两个应用,需要通过不同的域名进行访问。最初使用防火墙和DNS配置解决,但受限于防火墙版本不支持配置多个公网IP。随后提出了在Apache2.2中使用Virtual Host+AJP实现转发的软件级解决方案,尽管性能稍逊,但提供了一种替代方法。同时提到了另一种基于iptables的domain module的方案,但由于配置复杂性和风险较高而未采用。
1056

被折叠的 条评论
为什么被折叠?



