如何根据主机名在同一 IP 上的不同 Web 服务器之间切换?

如何根据主机名在同一 IP 上的不同 Web 服务器之间切换?

我这里有 4 台服务器,每台都运行 Win2008r2-WEB 作为 Web 服务器,并且都运行着不同类型的服务器(TomCat、IIS、Apache、ZendServer),每台服务器还有不同的 IP 地址(10.0.0.0/24)

有没有办法根据主机名将流量路由到每个服务器?(例如:apache.domain.org,iis.domain.org,tomcat.domain.org,zend.domain.org)

显然,我无法将 A 记录更改为内部 IP,并且我无权更改端口。

此外由于代理的原因,我不能使用其他端口,我只能访问:80 传入。

答案1

为了使其正常工作,您需要将现有 Web 服务器之一(或专用于该任务的单独服务器)配置为反向代理。

它将负责获取公共地址上的请求并读取主机头,然后根据请求的主机将请求代理到适当的私有地址。

执行此任务的流行软件包是 Apache(您可以使用现有实例)、nginx 或 HAProxy。这里有很多关于如何正确配置这些软件包的信息(“反向代理“是可以带您到达那里的搜索词),但如果您心中有特定的某个软件包,那么我可以用示例配置来编辑这个答案。

编辑:Apache 配置示例:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName apache.domain.org
    ServerAlias www.apache.domain.org
    # For this one, we'll imagine that you want to serve these resources from
    # the local server.  If you want do use a separate Apache instance instead,
    # then copy one of the other hosts for this one.
    DocumentRoot "C:\path\to\site\files"
    <Directory "C:\path\to\site\files">
        Order allow,deny
        Allow from all
    </Directory>
    # Any other directives you need for the content here
</VirtualHost>

<VirtualHost *:80>
    ServerName iis.domain.org
    ServerAlias www.iis.domain.org
    # Replace the URL below with the URL of the IIS server - make sure
    # to keep the trailing slash.
    ProxyPass / http://10.x.x.1:80/
    ProxyPassReverse / http://10.x.x.1:80/
</VirtualHost>

<VirtualHost *:80>
    ServerName tomcat.domain.org
    ServerAlias www.tomcat.domain.org
    # Replace the URL below with the URL of the Tomcat server - make sure
    # to keep the trailing slash.
    ProxyPass / http://10.x.x.2:8080/
    ProxyPassReverse / http://10.x.x.2:8080/
</VirtualHost>

答案2

为什么基于名称的虚拟主机不是一种选择?有什么原因吗?

http://httpd.apache.org/docs/2.0/vhosts/name-based.html

10.x 地址是内部地址,正如您所提到的,DNS 对此无能为力。所有服务器是否都响应相同的外部 IP 地址?(然后您可以在 DNS 中为每个子域创建 A 记录,每个记录都指向相同的 IP...或者更好的是,使用 CNAMES。)

答案3

至少在 IIS 中,您可以使用主机标头根据 DNS 名称检测哪个网站应该响应。因此,如果您希望 IIS 站点 1 响应诸如“testsite1.com 和 www.testsite1.com”之类的站点,只需将这些站点添加到该给定 IIS 站点的主机标头中即可。然后在第二个 iis 站点上,您可以分配“testsite2.com 和 www.testsite2.com”,IIS 将拾取这些域。就主机标头而言,DNS 就 A 和 CNAME 而言无关紧要。IIS 可以同时使用这两种方式。

通常我们对 IIS 所做的是,为服务器名称本身创建一个 A 记录,然后使用 CNAME 转发到服务器名称 A 记录。

因此 Web 服务器 A = 10.10.10.10 testsite1.com CNAME = web 服务器 testsite2.com CNAME = web 服务器

然后 IIS 将根据 DNS 名称知道将站点发送到哪里。

相关内容