如果想使用一台机器来支持多个WEB网站,传统的做法是采用虚拟主机,但是当多个网站都需要共享MySQL等数据库或者其它资源时,就比较麻烦,如果给每个WEB网站一个虚拟机,就可以完全独立运行,还可以随时迁移,效果当然不可同日而语啦。本人最近通过实践,找到一个方法,完全可以实现,只需要2个步骤:启动XEN虚拟机,运行所需的WEB网站服务;在宿主机上采用Iptables设置NAT网络将外网的访问定位到虚拟机的地址,或者通过宿主机上Apache
rewrite规则将外网的访问重新定向到虚拟机上。虚拟机运行及WEB网站的开发运行,这里不再赘述,本文主要探讨如何进行访问重定向。
1) NAT
比如外网地址为202.102.32.65,虚拟机的地址为192.168.122.196。
首先将虚拟机的地址固定,而不是采用默认的DHCP,编辑/etc/xen下面对应的配置文件,比如:
vif = [ "mac=00:16:36:3d:6d:60,ip=192.168.122.196,bridge=virbr0,script=vif-bridge" ]
然后,在虚拟机上将IP地址设为静态的192.168.122.30。
最后,在宿主机上重定向端口访问,比如将所有访问外网地址202.102.32.65上8080端口的请求重新定向到192.168.122.196上的80端口,只需在宿主机上执行如下命令即可:
iptables -t nat -A PREROUTING -j DNAT -p tcp -m tcp --dport 8080 --to-destination 192.168.122.30:80
2) Apache虚拟主机的Rewrite规则
虚拟机建好后,一般在宿主机上可以直接访问,因此可以在通过宿主机上建立apache的虚拟机主机,在其中直接将访问虚拟机的请求rewrite到虚拟机上,可以把如下代码直接贴到httpd.conf中。
NameVirtualHost 202.102.32.65
<VirtualHost 202.102.32.65>
ServerName 202.102.32.65
DocumentRoot /opt/lampp/htdocs
</VirtualHost>
#如果你想在现有的web服务器上增加虚拟主机, 你必须也为现存的主机建造一个<VirtualHost>定义块。 这个虚拟主机中
<VirtualHost 202.102.32.65>
ServerAdmin admin@myhome.com
ServerName www.myhome.com
ServerAlias myhome.com *.myhome.com
CustomLog logs/server.cn-access.log combined
ErrorLog logs/server.cn-error.log
LogLevel warn
RewriteEngine On
ProxyRequests On
RewriteLog logs/server.cn.rewrite.log
RewriteLogLevel 2
RewriteRule ^/icons/ - [L]
RewriteRule ^/(.*)$ http://192.168.122.30/$1 [L,P]
</VirtualHost>
然后在DNS上将www.myhome.com指向外网地址202.102.32.65上,然后直接访问www.myhome.com即可得到虚拟机上的网页地址。
1) NAT
比如外网地址为202.102.32.65,虚拟机的地址为192.168.122.196。
首先将虚拟机的地址固定,而不是采用默认的DHCP,编辑/etc/xen下面对应的配置文件,比如:
vif = [ "mac=00:16:36:3d:6d:60,ip=192.168.122.196,bridge=virbr0,script=vif-bridge" ]
然后,在虚拟机上将IP地址设为静态的192.168.122.30。
最后,在宿主机上重定向端口访问,比如将所有访问外网地址202.102.32.65上8080端口的请求重新定向到192.168.122.196上的80端口,只需在宿主机上执行如下命令即可:
iptables -t nat -A PREROUTING -j DNAT -p tcp -m tcp --dport 8080 --to-destination 192.168.122.30:80
2) Apache虚拟主机的Rewrite规则
虚拟机建好后,一般在宿主机上可以直接访问,因此可以在通过宿主机上建立apache的虚拟机主机,在其中直接将访问虚拟机的请求rewrite到虚拟机上,可以把如下代码直接贴到httpd.conf中。
NameVirtualHost 202.102.32.65
<VirtualHost 202.102.32.65>
ServerName 202.102.32.65
DocumentRoot /opt/lampp/htdocs
</VirtualHost>
#如果你想在现有的web服务器上增加虚拟主机, 你必须也为现存的主机建造一个<VirtualHost>定义块。 这个虚拟主机中
ServerName
和DocumentRoot
所包含的内容应该与全局的ServerName
和DocumentRoot
保持一致。
还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。<VirtualHost 202.102.32.65>
ServerAdmin admin@myhome.com
ServerName www.myhome.com
ServerAlias myhome.com *.myhome.com
CustomLog logs/server.cn-access.log combined
ErrorLog logs/server.cn-error.log
LogLevel warn
RewriteEngine On
ProxyRequests On
RewriteLog logs/server.cn.rewrite.log
RewriteLogLevel 2
RewriteRule ^/icons/ - [L]
RewriteRule ^/(.*)$ http://192.168.122.30/$1 [L,P]
</VirtualHost>
然后在DNS上将www.myhome.com指向外网地址202.102.32.65上,然后直接访问www.myhome.com即可得到虚拟机上的网页地址。