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

Wil*_*iam 9 networking firewall svn

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

如果我将其设置为每个端口都在侦听不同的端口,那么是否可以使用不同的子域访问每个服务器(因此 svn.domain.com 将指向 svn、mail.domain。 com 会指向交换服务器)?也许有一种方法可以设置我的路由器以根据客户端请求的子域以不同的方式转发端口?

人们通常如何看待这个问题?

kob*_*ltz 9

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

有时您可能需要拥有多个 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>
Run Code Online (Sandbox Code Playgroud)

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

这个路由的好处是你可以使用相同的 IP 地址为多个 HTTPS 服务器提供服务。唯一的问题是 Internet Explorer 无法识别 VirtualHost 端口 443 或命名主机,并且您会收到证书错误。但是,Safari、Firefox 和 Chrome 都可以识别被代理域的每个单独证书。