由于我们是在局区网内用机器做测试服务器,机器比较紧张,而IP地址倒是比较富余,所以使用同一机器的多IP来配置虚拟主机就是一个不错的选择了。因为我想在同一机器上进行两个系统的部署,所以就使用apache来进行虚拟主机的多IP配置了。好了,开始我们的配置之旅吧~~~
首先就是apache和resin的安装了,安装就不用说了哈。整合就简单说下吧,其实两者之间的整合还是比较简单的,在编译安装resin的时候需要指定apache的相关配置,这样resin就会自动在apache的配置文件后加上连接到resin的配置了哈,这个具体的先不说,反正安装resin很简单,几行命令而已,照着敲就可以了。假设我们都已经安装好apache和resin了,我们在整个文章中先作如下的假设:
1.apache的安装路径是:$apache_path
2.resin的安装路径是:$resin_path
3.你的应用系统的路径是:$web_path
我们首先说单个系统在resin和apache中的整合。按照如下的步骤进行:
1.配置resin的document-root为$web_path
2.打开apache的配置文件$apache_paht/conf/httpd.conf,找到DocumentRoot,将其替换为$web_path
保存修改后的配置文件后,重启resin和apache,再输入IP地址就可以访问到你的下web系统了,注意resin的端口8080不要和apache的监听端口80冲突了。其实他们的简单组合就这么简单,至于如何优化那就是后话了哈,所谓万事开头难嘛,开头搞定了,后面的工作就好办了咯~~~
上面说的是如何在利用resin和apache配置单系统,如果我们有多个系统需要在同一主机上进行部署,目前apache支持基于名字的多虚拟主机和基于IP的多虚拟主机,前者适合在IP不富余的情况下,而后者则适合IP比较多的情况下进行部署。我们今天主要讲的就是后者了,就如本文前面所说的一样。好了,就开始配置我们的多IP的虚拟主机吧~~
由于是基于多IP的虚拟主机,首先当然就是给主机配置多个IP地址咯, 我们这里以配置两个IP为主,配置多余两个IP的就一样了。首先我们在linux下查看该主机的IP地址:
#ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:8d:B7:6A:E0
inet addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.252.0
inet6 addr: fd80::213:8eff:feb7:2ae0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7077 errors:0 dropped:0 overruns:0 frame:0
TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:654811 (639.4 KiB) TX bytes:6229 (6.0 KiB)
Interrupt:10 Base address:0xb800
这里我们只看到该主机只有一个IP地址,我们要在网卡eth0上再绑定另外一个IP,因为一般的机器它只有一张网卡,所以我们就在同一张网卡上进行多个IP的绑定。好了,我们开始做吧。
1.首先进入网卡的配置文件
#cd /etc/sysconfig/network-scripts
2.复制网卡eth0的配置文件
#cp ifcfg-eth0 ifcfg-eth0:0
3.修改ifcfg-eht0:0文件
#vi ifcfg-eth0:0
将其中的IP地址改为你的另外一个IP地址,比如我的修改如下:
DEVICE=eth0:0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:16:8d:B7:6A:E0
IPADDR=192.168.1.112
NETMASK=255.255.252.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet
注意的是,eth0:0的物理网卡地址必须要和eth0d物理网卡地址,即HWaddr要一致,因为是在同一网卡上绑定的多个IP。保存好后,我们就可以重启网卡了,这里要注意的是,如果你是在远程操作机器,请不要直接使用下面的命令,因为网卡down掉后,你就连不上了,呵呵~~~
4.重新启动网卡
#ifconfig eth0 down
#ifconfig eth0 up
5.启动后,再查看IP地址
#ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:8d:B7:6A:E0
inet addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.252.0
inet6 addr: fd80::213:8eff:feb7:2ae0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7077 errors:0 dropped:0 overruns:0 frame:0
TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:654811 (639.4 KiB) TX bytes:6229 (6.0 KiB)
Interrupt:10 Base address:0xb800
eth0:0 Link encap:Ethernet HWaddr 00:16:8d:B7:6A:E0
inet addr:192.168.1.112 Bcast:192.168.1.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:10 Base address:0xb800
看看,机器是不是有两个IP地址了啊,呵呵,可以试着用另外一台机器ping下~~~
#ping 192.168.1.111
PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data.
64 bytes from 192.168.1.111: icmp_seq=0 ttl=64 time=0.061 ms
64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 192.168.1.111: icmp_seq=2 ttl=64 time=0.052 ms
#ping 192.168.1.112
PING 192.168.1.112 (192.168.1.112) 56(84) bytes of data.
64 bytes from 192.168.1.112: icmp_seq=0 ttl=64 time=0.063 ms
64 bytes from 192.168.1.112: icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from 192.168.1.112: icmp_seq=2 ttl=64 time=0.055 ms
呵呵,可以了吧~~~好了,这是我们给apache配置多IP的虚拟主机的第一步,我们接着开始配置apache吧~~按如下步骤进行:
1.进入apache的配置文件所在目录
#cd $apache_path/conf
2.打开它的配置文件httpd.conf
#vi httpd.conf
3.在该配置文件的最后面的部分,我们可以看到如下的被注释掉的命令:
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin [email protected]
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
这里就是我们今天主要做的工作了哦,我们来配置基于IP的两个web系统。修改如下:
1.去掉<VirtualHost *:80>到</VirtualHost>它们之间的命令行前的#号
2.修改<VirtualHost *:80>中的*号为192.168.1.111,这是我们主机的第一个IP地址
3.然后再修改DocumentRoot为你的第一个web系统的部署路径
4.然后修改ServerName后的为你的IP地址,即192.168.1.111。注意这里要改成IP地址哦,这样就可以通过IP地址进行访问了,因为在内部做测试服务器是没有域名的~
按上述的培好后就完成了第一个虚拟目录的配置,要知道今天我们是来配置多个虚拟目录的,不要忘了我们还有一个IP,就是我们在上面配置的192.168.1.112。我们将<VirtualHost 192.168.1.111:80>到</VirtualHost>之间的部分再复制一份,放到它的后面,然后再如下修改:
1.改192.168.1.111为我们的另一个IP地址192.168.1.112
2.修改DocumentRoot为我们部署的另外一个web系统的路径
3.ServerName同样也要改成我们的另外一个IP地址192.168.1.112
4.当然了,你也可以更改ErrorLog和CustomLog的日志文件,不同的系统建议使用不同的日志记录文件
5.完成上面的配置后,总的配置如下:
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost 192.168.1.111:80>
ServerAdmin [email protected]
DocumentRoot /data/web/web1
ServerName 192.168.1.111
ErrorLog logs/web1.com-error_log
CustomLog logs/web1.com-access_log common
</VirtualHost>
<VirtualHost 192.168.1.112:80>
ServerAdmin [email protected]
DocumentRoot /data/web/web2
ServerName 192.168.1.112
ErrorLog logs/web2.com-error_log
CustomLog logs/web2.com-access_log common
</VirtualHost>
保存配置文件后,我们还要修改resin的配置文件,要不怎么让resin支持多个虚拟目录呢,是吧?呵呵,按照如下步骤进行:
1.进入resin的配置文件所在的目录
#cd $resin_path/conf
2.打开resin的配置文件resin.conf
#vi resin.conf
3.在文件的最后一个</server>前面加入如下内容:
<!-- this host is for web1 -->
<host id="192.168.1.111">
<web-app id="/" document-directory="/data/web/web1"/>
</host>
<!-- this host is for web2 -->
<host id="192.168.1.112">
<web-app id="/" document-directory="/data/web/web2"/>
</host>
4.然后保存配置文件,退出
重启resin和apache,再在浏览器中输入IP地址就可以访问到各自不同的系统了。但是到目前为止碰到了一个问题,就是我输入http://192.168.1.111可以正确的进入到/data/web/web1下的目录并且可以访问到静态文件,但是web.xml中做的映射却出现找不到的问题,但是我输入http://192.168.1.111:8080却可以正确访问到,但这样它又绕过了apache而直接访问resin了。然而我输入http://192.168.1.112却可以正常访问到/data/web/web2系统,同样是有映射文件的。呵呵,这个问题以后得好好研究研究!
当然了,如果你还有更多的系统需要部署到同一主机上,就可以按照上面的配置一步步来就可以了。
虽然还有一点小问题没有解决,但是好歹也是体验了一把配置虚拟主机的过程,怎么说也算是有所收获哈,遗留的问题会慢慢解决的~~~