我有两个应用程序在一台 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.com
10.77.70.90 app2.test.abc.com
,并在将托管 10.77.70.90 内容的机器上设置以下 Apache。
首先使用 Apache 设置虚拟主机并启用模块proxy
并proxy_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 中。