单个防火墙后面有多个 Web 服务器

单个防火墙后面有多个 Web 服务器

我在单个防火墙后面有多个 Web 服务器(SVN、Exchange 等)。我希望能够远程访问所有不同的服务器,但由于它们都使用相同的端口(标准 HTTPS),这可行吗?

如果我将其设置为每个服务器监听不同的端口,是否可以使用不同的子域访问每个服务器(因此 svn.domain.com 将指向 svn,mail.domain.com 将指向 exchange 服务器)?是否有办法设置我的路由器,使其根据客户端请求的子域以不同的方式转发端口?

人们通常如何处理这个问题?

答案1

我个人喜欢在 Apache 中使用反向代理,当使用一个 IP 地址为多个服务器提供服务时。几年前我写了一篇关于这个的文章。

有时您可能需要多个 Web 服务器,但只给您一个公共 IP 地址。您将遇到的问题是,您希望多个域解析相同的 IP 地址,但指向不同的服务器。这在 Apache 中非常可行。我在我的私有云中配置了一个网关服务器,地址为 192.168.1.2。我有几个具有本地地址的 Web 服务器;例如 192.168.1.10 和 192.168.1.11。

在我的网关服务器上,我安装了 Apache 和 mod_proxy 文件。完成后,我就可以设置虚拟主机来转发域名。

<VirtualHost *:80>
   DocumentRoot /var/www/example.org
    ServerName *.example.org
    ProxyRequests Off
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPreserveHost on
    ProxyPass / http://192.168.1.10/
    ProxyPassReverse / http://192.168.1.10
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot /var/www/example.com
    ServerName *.example.com
    ProxyRequests Off
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPreserveHost on
    ProxyPass / http://192.168.1.11/
    ProxyPassReverse / http://192.168.1.11/
</VirtualHost>

重新启动 Apache 并配置路由器以接受到 192.168.1.2 本地地址的传入连接。虽然我可以将 DocumentRoot 指向同一位置(即 /var/www),但我通常为每个站点都设置 .htaccess 文件,以便强制 SSL(在特定域名上将 80 重定向到 443)。

此路由的优点在于,您可以使用同一个 IP 地址为多个 HTTPS 服务器提供服务。唯一的问题是 Internet Explorer 无法识别 VirtualHost 端口 443 或命名主机,因此您会收到证书错误。但是,Safari、Firefox 和 Chrome 都可以识别代理域的每个证书。

答案2

Kobaltz 的可能是最好的解决方案。

但是,如果您愿意使用非默认端口,则可以为其中一个应用程序设置端口转发(实际上,它只是更改源/目标端口的 NAT)。因此,您可以将其中一个表示为 https 的正常端口 443,另一个表示为 8443 之类的端口。要浏览到该其他服务器,您需要输入https://youipaddress:8443(或 DNS 条目,如果您有一个设置)。当然,这仅在您愿意使用不同的端口号时才有效,但当功能有限时,这是一种非常常见的解决方案。

具体配置将根据执行 NAT 的边缘设备(防火墙或路由器)而有很大差异,但通常您将像这样转换:

内部 IP -> 外部 IP(可能是您的外部接口的 IP)标准端口(443)-> 选定端口(例如 8443)

这是一篇有关端口转发的好文章。

答案3

或者您可以使用 PageKite :)

请参阅下面的项目页面:
https://pagekite.net/wiki/OpenSource/

答案4

这里请参阅 Microsoft 文档来设置代理服务器。

相关内容