一个 IP 对应多个服务器的棘手域名设置

一个 IP 对应多个服务器的棘手域名设置

我有一个域名、一个子域名、一个 IP 和多个服务器。

两台服务器共享全局 IP xxx.xxx.xxx.xxx 并在同一个端口 80、443 上运行。

我一直在研究我的路由器,但没有发现任何有用的东西。

这两台服务器都运行 Apache,PHP 7.3 服务器 1 运行 Windows,服务器 2 运行 Linux。

我希望结果是这样的:

www.mydomain.com 服务器 1

fileserver.mydomain.com 服务器 2

我也在努力学习,所以如果你能解释一下,我将非常感激。

由于域和子域都指向同一个 IP,所以我总是最终到达“服务器 1”(像这样转发)。我可以在主机文件中添加“192.168.x.xx fileserver.mydomain.com”来进行此重定向吗?还是我必须修改 apache 配置中的某些内容?我宁愿不更改 80、443 端口。

如果我必须添加服务器/计算机/路由器才能实现这一点,那就没问题了。

我怎样才能设置这样的功能?

答案1

解决这个问题的一个相对简单的方法是使用虚拟主机,并在其中一台服务器上使用反向代理。然后,您的路由器只需将端口 80 和 443 转发到您的其中一台服务器,该服务器将成为“主”服务器。然后,“主”服务器通过反向代理将流量转发到“辅助”服务器。

您可以将任一服务器指定为充当反向代理的主服务器。

大致意思如下(使用服务器 2 作为反向代理,因为这是我更熟悉的 Linux 服务器)。此处描述的命令适用于 Ubuntu 风格的 Linux。您可能需要针对特定​​的 Linux 风格进行修改:

  • 设置路由器将端口 80 和 443 转发到服务器 2
  • 在服务器 2 上启用 Apache 反向代理
    sudo a2enmod proxy
    sudo a2enmod proxy_http
  • 在服务器 2 内创建一个虚拟主机,将代理反向连接到服务器 1

    通过编辑默认虚拟主机(端口 80)或在 Apache 中创建新的虚拟主机配置来执行此操作:

    <VirtualHost *:80>
      NameVirtualHost www.example.com
      ProxyPreserveHost On
      ProxyPass / http://<ip-of-server 1>:80/
      ProxyPassReverse / http://<ip-of-server 1>:80/
    </VirtualHost>
  • SSL(端口 443)有点棘手。您可以选择以下设置:
    1. 终止服务器 2 上的 SSL 连接并将纯 HTTP 转发到服务器 1
    2. 从服务器 2 到服务器 1 的 SSL 隧道

      显然,设置 2 更安全。在设置 1 中,纯 HTTP 将保留在您的本地网络中(这可能足够安全也可能不够安全),您只需要在一台服务器上设置 SSL。

      设置 1 可能像下面这样简单(在您的 SSL 虚拟主机配置中配置它):
    <VirtualHost *:443>
      NameVirtualHost www.example.com
      ProxyPreserveHost On

      SSLEngine On
      SSLCertificateFile /etc/ssl/<path-to-certificate-file>
      SSLCertificateKeyFile /etc/ssl/<path-to-private-key>

      ProxyPass / http://<ip-of-server 1>:80/
      ProxyPassReverse / http://<ip-of-server 1>:80/
    </VirtualHost>

您可能需要尝试一些不同的选项,但这基本上可以完成工作。

相关内容