我在 apache2 上使用 mod_proxy + 虚拟主机将我的子域(如 redmine.domain.com 或 git.domain.com)重定向到安装了匹配服务的特定容器。
因此,每个服务都安装在不同的容器(虚拟机、linux)上,我有一个运行 apache 的服务,负责将 http 请求分派到相应的服务。
要将 IP 地址分配给虚拟机,我编辑 /etc/network/interfaces 文件,如下所示:
auto eth0
iface eth0 inet static
address 192.168.4.6
netmask 255.255.255.0
broadcast 192.168.4.255
post-up route add 192.168.4.1 dev eth0
post-up route add default gw 192.168.4.1
post-down route del 192.168.4.1 dev eth0
post-down route del default gw 192.168.4.1
其中 192.168.4.6 是我希望它拥有的当前 VM ip 地址,而 192.168.4.1 是我的网关。
它适用于负责调度的虚拟机,但几分钟/秒后它不适用于其他虚拟机。
事实上,当我把它放在我的 redmine 虚拟机上时,它可以工作,片刻,当我执行 ifconfig 时,我得到:
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:x:xx
inet addr:192.168.4.6 Bcast:192.168.4.255 Mask:255.255.255.0
但是,过了一会儿(通常是几秒钟),它又回到了这样的状态:
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:88.xxx.x.91 Bcast:88.xxx.x.255 Mask:255.255.252.0
在我的 /etc/apache2/sites-available/default 我有这个:
<VirtualHost *:80>
ServerAdmin admin@admin.com
ServerName domain.com
ProxyPass / http://192.168.4.7:80/
ProxyPassReverse / http://192.168.4.7:80/
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@admin.com
ServerName redmine.domain.com
ProxyPass / http://192.168.4.6:80/
ProxyPassReverse / http://192.168.4.6:8080/
</VirtualHost>