具有两个应用程序的一台服务器的 DNS 名称

具有两个应用程序的一台服务器的 DNS 名称

我有两个应用程序在一台 Linux 服务器上运行,但使用不同的端口。据我所知,DNS 名称用于 IP 地址。我们无法为一台服务器的不同端口创建两个主机名。

我希望 DNS 名称也包含端口。这怎么可能呢?如果我为 10.77.70.90 创建 DNS 条目 test.abc.com,我的两个应用程序是否可以使用此 URL test.abc.com:8080 test.abc.com:8081

请帮忙,谢谢

答案1

DNS 中不可能包含端口信息 - 如您所知,DNS 提供纯粹的第 3 层信息,仅提供 IP 地址(SRV 记录除外,它经常包含端口信息,但不幸的是,Web 浏览器不支持 SRV 记录)。

但是,在 URL 中包含端口号就可以了。

另一种选择是使用代理(nginx、mod_proxy 等)将流量代理到您的应用程序。使用此方法,您可以执行以下映射:

http://app1.test.abc.com -> http://test.abc.com:8080
http://app2.test.abc.com -> http://test.abc.com:8081

答案2

Apache 反向代理是可行的方法。我回答了一个类似的问题问题在这里以 EEAA 在此处给出的答案为例,我建议如下。

因此,基本上,您的应用程序在同一台机器(即:localhost)上运行,但设置了不同的端口:8080 和 8081。设置这些端口并确保它们在这些端口上运行。它们运行良好?太棒了!现在将 DNS 条目设置为指向app1.test.abc.com10.77.70.90 app2.test.abc.com,并在将托管 10.77.70.90 内容的机器上设置以下 Apache。

首先使用 Apache 设置虚拟主机并启用模块proxyproxy_http

sudo a2enmod proxy
sudo a2enmod proxy_http

然后,通过查找以下内容(应位于标准 Apache2 配置目录中)来确保虚拟主机支持在主 Apache 配置中的某个位置处于活动状态ports.conf。如果它未处于活动状态,则应该有一些注释掉的行,如下所示:

NameVirtualHost *:80

然后按如下方式设置虚拟主机。这是的虚拟主机配置app1.test.abc.com

<VirtualHost *:80>
  ServerName app1.test.abc.com
  ServerAlias app1.test.abc.com

  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^app1\.test\.abc\.com [NC]
  RewriteCond %{HTTP_HOST} !^$
  RewriteRule ^/(.*) http://app1.test.abc.com/$1 [L,R]

  <IfModule mod_proxy.c>

    # Proxy specific settings
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
      AddDefaultCharset off
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

  </IfModule>

</VirtualHost>

这是虚拟主机配置app2.test.abc.com

<VirtualHost *:80>
  ServerName app2.test.abc.com
  ServerAlias app2.test.abc.com

  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^app2\.test\.abc\.com [NC]
  RewriteCond %{HTTP_HOST} !^$
  RewriteRule ^/(.*) http://app2.test.abc.com/$1 [L,R]

  <IfModule mod_proxy.c>

    # Proxy specific settings
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
      AddDefaultCharset off
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/

  </IfModule>

</VirtualHost>

一切顺利吗?重启 Apache 服务器,看看进入app1.test.abc.com或时会弹出什么app2.test.abc.com。如果一切顺利,端口 8080 和 8081 上的应用应该会显示在每个 URL 中。

相关内容