我有一个机架式服务器(HOSTA,运行Ubuntu 12.04),有两个虚拟化安装的Ubuntu(VIRTA&VIRTB,通过vboxheadless,一个是12.04,另一个是14.04)。 一个有最新版本的apache / mysql / php,一个旧版本的web应用程序。 所有这三个安装的Ubuntu都有自己的本地IP地址。 我有一个目前映射到example1.ddns.me的外部IP地址(通过no-ip)。 目前,networkingstream量然后通过我的verizon路由器转发到VIRTA。 现在,我需要让这个老式的服务器运行起来,让世界各地都能看到,而且我不允许使用80以外的其他端口,否则我会把8080端口路由到VIRTB上。
我希望所有传入的networkingstream量去HOSTA和设置反向代理(我认为?)将example1.ddns.me分割为VIRTA和example2.ddns.me分割到VIRTB。 这是如何反向代理工作? 任何人都可以提供演练吗?
您可以使用HAproxy根据使用ACL的主机名向不同的后端发送请求:
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#acl
例:
acl is_host1 hdr(host) -i host1.example.com acl is_host2 hdr(host) -i host2.example.com use backend host1_backend if is_host1 use backend host2_backend if is_host2
这只是一个片段,不是一个完整的工作configuration,但它应该让你在正确的轨道上。
好吧,这是我最终select的解决scheme,这很好。 为了彻底的回答,我会简要回顾一下。
服务器:
ServerA – Ubuntu的12.04 – 192.168.1.230的内部静态IP
ServerB – Ubuntu的14.04 – 内部静态IP为192.168.1.235
我有一个网站在每个服务器上,12.04(与一个较旧的PHP安装),我希望exampleA.com指向,我的新网站在14.04与新的PHP与exampleB.com。 两台服务器都在运行Apache2。
我有一个外部IP地址,这两个域和所有子域指向。 我的路由器上的端口转发将端口80上的所有传入stream量传递给ServerA。
通常情况下,所有的网页文件都将在/ var / www /中,这个文件是由/ etc / apache2 / sites-available / default中的apache2configuration日志设置的(在ubuntu14.04上这个文件是/ etc / apache2 / sites-available / 000-默认值)。
我离开了默认的VirtualHost模块,让原来的网站保持正常运行,没有改变,如下所示:
<VirtualHost *:80> DocumentRoot /var/www </VirtualHost>
该块可能有其他的configuration,比如网站pipe理员的电子邮件和.htaccess的每个目录的configuration等,但基本的是,从端口80进来的任何东西都指向你的/ var / www文件夹,并从那里。
在VirtualHost块下面,我添加了一个新的VirtualHost块,如下所示:
<VirtualHost *:80> ServerName exampleb.com ProxyPreserveHost on ProxyPass / http://192.168.1.235 ProxyPassReverse / http://192.168.1.235 </VirtualHost>
这允许来自exampleb.com的端口80(至192.168.1.230地址)的任何stream量被转发到192.168.1.235,并由于该代理部分而从该机器上的apache服务。 发生什么是基于该机器的Apacheconfiguration。
这个设置将需要在apache2中启用代理,这可以通过ubuntu中的这个命令完成:
a2enmod proxy
事实certificate,这是一个非常简单的安排,完全符合我的意图。 对不起,如果这个解释不是很清楚,欢迎反馈意见来改进或澄清。
看看这个Apache文档: mod_proxy
你可能会发现有用的第一个主题“前向代理和反向代理/网关”,它的例子(也许你需要挖掘一些更多的例子,以使其工作)
有时候,你将不得不添加一些重写规则的url,但会做的伎俩
无论如何,我会按照Jim G.在评论中提出的build议。