采用Xen虚拟机设置多个单独的WEB网站

来源:互联网 发布:java int 取整 编辑:程序博客网 时间:2024/05/10 20:50
如果想使用一台机器来支持多个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>定义块。 这个虚拟主机中ServerNameDocumentRoot 所包含的内容应该与全局的ServerNameDocumentRoot保持一致。 还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。
<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即可得到虚拟机上的网页地址。
原创粉丝点击