如何通过 Apache Web 服务器使用一个 IP 和一个端口访问三个 Web 产品
Posted
技术标签:
【中文标题】如何通过 Apache Web 服务器使用一个 IP 和一个端口访问三个 Web 产品【英文标题】:How to access three Web products via Apache Web server using single IP and one port 【发布时间】:2015-11-09 11:55:37 【问题描述】:我们希望通过任何向量来解决以下通过 URL 访问我们的网络产品的问题。我们想通过拥有一个公共 IP 的托管服务器上的端口 80 访问三个产品。它们将在不同的时间点被访问,因此我们为所有它们使用一个端口。我们如何通过以下 URL 访问这些产品?可以通过下面的Apache Web 服务器配置来实现吗?或者,除了 Apache Web 服务器配置之外,我们还需要本地 DNS 服务器吗?
通过 URL 访问的产品:
http://<Our.Server.Fully.Qualified.Domain.Name.com>/product1
http://<Our.Server.Fully.Qualified.Domain.Name.com>/product2
http://<Our.Server.Fully.Qualified.Domain.Name.com>/product3
在/etc/hosts
文件中,我们添加了
10.10.10.100 product1 product2 product3
Apache Web 服务器的vhosts.conf
<VirtualHost 10.10.10.100:80>
DocumentRoot "/usr/local/product1"
ServerName product1
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/product2"
ServerName product2
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/product3"
ServerName product3
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
</VirtualHost>
编辑:由于@arober11 的解决方案对我们有效,我们已将配置扩展到三个附加产品,这些产品分布在同一台服务器(虚拟机、VM-1、VM-2)上物理服务器:
(1) product4 位于 VM-1 的不同目录 (/usr/local/dir4/product4
) 中(products1/2/3 位于 /usr/local
)。
(2) product5 位于/usr/local/dir5/product5
中的另一台服务器 VM-2 中。
(3) product6 在/usr/local/dir6/product6
的VM-2 中。
我们知道一个 VirtualHost 容器只能有一个 ServerName,而 ServerName 又只能有一个 DocumentRoot。因此,对于 4/5/6 的每个产品,我们是否必须:
(i) 使用各自的 IP 和端口号创建新的虚拟主机?
(ii) 将 ServerNames 分别添加到 VM-1 和 VM-2 的 /etc/hosts
。 (或者,即使在这个扩展部署中,这也是多余的吗?)
---------详情------------
两个虚拟机都由同一个外部 IP 访问。虚拟机的私有 IP 和它们的 DNS 指针是:
VM-1: http://<Our.Server.Fully.Qualified.Domain.Name.com> -> 10.10.10.100 (Port 80)
VM-2: http://<Our.Server.Fully.Qualified.Domain.Name.com:9080> -> 10.10.10.200 (Port 9080)
产品将通过以下方式访问:
http://<Our.Server.Fully.Qualified.Domain.Name.com>/product4 (in VM-1)
http://<Our.Server.Fully.Qualified.Domain.Name.com>:9080/product5 (in VM-2)
http://<Our.Server.Fully.Qualified.Domain.Name.com>:9080/product6 (in VM-2)
(1) VM-1 中的产品 4。
<VirtualHost *:80>
DocumentRoot "/usr/local/dir4/product4"
ServerName product4
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
<Directory />
DirectoryIndex index.php
</Directory>
</VirtualHost>
(2) 产品 5(在 VM-2 中)
<VirtualHost 10.10.10.200:9080>
DocumentRoot "/usr/local/dir5/product5"
ServerName product5
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
<Directory />
DirectoryIndex index.html
</Directory>
</VirtualHost>
(3) 对于产品 6(在 VM-2 中)
<VirtualHost 10.10.10.200:9080>
DocumentRoot "/usr/local/dir6/product6"
ServerName product6
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/ logs/access_log"
<Directory />
DirectoryIndex abc.jsp
</Directory>
</VirtualHost>
【问题讨论】:
【参考方案1】:您可能会丢失多余的 /etc/hosts 条目,因为您只需要一个 VirtualHost,其中一个 DocRoot 指向您的子目录的父目录,例如.
<VirtualHost *:80>
DocumentRoot "/usr/local/"
ServerName Our.Server.Fully.Qualified.Domain.Name.com
ServerAdmin admin@Our.Server.Fully.Qualified.Domain.Name.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/logs/access_log"
</VirtualHost>
【讨论】:
谢谢@arober11。您的建议帮助我们解决了这个问题。我们有一个编辑来发布寻求意见。 这个问题在 EDIT 之后是否处于某种待处理状态,等待批准或解除阻止?单击对唯一答案的赞成票,并根据指南,在接受最佳答案之前等待更多答案。在阅读了所有指南之后,它们都得到了遵守(希望如此)。以上是关于如何通过 Apache Web 服务器使用一个 IP 和一个端口访问三个 Web 产品的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Apache Web 服务器控制 Raspberry Pi 的串行 GPIO 引脚
如何在Ubuntu上搭建一台安全的Apache Web服务器