如何通过 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服务器

如何在CentOS配置Apache的HTTPS服务

WEB服务器如何选择 Apache or Nginx?

为 RESTful Web 服务设置 MySQL 和 Apache

linux下如何实现web上传并显示图片