如何使用 Apache Web 服务器配置多个网站

本文介绍如何在 Apache(一个流行的且强大的 Web 服务器)上托管两个或更多网站。
362 位读者喜欢这篇文章。
Feathers

Alexas_Fotos. CC0。

在我上一篇文章中,我解释了如何为单个网站配置 Apache Web 服务器。 结果非常简单。 在本文中,我将向您展示如何使用单个 Apache 实例来服务多个网站。

注意:我是在使用 Fedora 27 和 Apache 2.4.29 的虚拟机上撰写本文的。 如果您有其他发行版或 Fedora 版本,那么您将使用的命令以及配置文件的位置和内容可能会有所不同。

正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf/etc/httpd/conf.d 中。 网站的数据默认位于 /var/www 中。 对于多个网站,您需要提供多个位置,每个站点一个。

基于名称的虚拟主机

使用基于名称的虚拟主机,您可以使用单个 IP 地址来托管多个网站。 现代 Web 服务器(包括 Apache)使用指定的 URL 的 hostname 部分来确定哪个虚拟 Web 主机响应页面请求。 这只需要比单个站点多一点配置。

即使您刚开始只有一个网站,我也建议您将其设置为虚拟主机,这将使以后添加更多站点变得更容易。 在本文中,我将从上一篇文章中停下来的地方继续,因此您需要设置原始网站,这是一个基于名称的虚拟网站。

准备原始网站

在设置第二个网站之前,您需要使现有站点基于名称的虚拟主机工作。 如果您没有现有网站,请返回并立即创建一个

设置好您的站点后,将以下节添加到其 /etc/httpd/conf/httpd.conf 配置文件的底部(添加此节是您需要对 httpd.conf 文件所做的唯一更改)

<VirtualHost 127.0.0.1:80>
    DocumentRoot /var/www/html
    ServerName www.site1.org
</VirtualHost>

这将是第一个虚拟主机节,它应该保持在第一位,以使其成为默认定义。 这意味着通过 IP 地址或解析为该 IP 地址的另一个名称(但没有特定的命名主机配置节)对服务器的 HTTP 访问将被定向到此虚拟主机。 所有其他虚拟主机配置节应在此之后。

您还需要在 /etc/hosts 中使用条目设置您的网站,以提供名称解析。 上一次,我们只使用了 localhost 的 IP 地址。 通常,这将使用您使用的任何名称服务来完成; 例如,Google 或 Godaddy。 对于您的测试网站,请通过在 /etc/hosts 中将新名称添加到 localhost 行来执行此操作。 为两个网站添加条目,这样您以后就不需要再次编辑此文件了。 结果如下

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 www.site1.org www.site2.org

让我们也更改 /var/www/html/index.html 文件,使其更明确一些。 它应该如下所示(带有一些附加文本,以将其标识为网站 1)

<h1>Hello World</h1> 

Web site 1.

重新启动 HTTPD 服务器以启用对 httpd 配置的更改。 然后,您可以从命令行使用 Lynx 文本模式浏览器查看该网站。

[root@testvm1 ~]# systemctl restart httpd
[root@testvm1 ~]# lynx www.site1.org

                                              Hello World 
  Web site 1.
<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

您可以看到显示了原始网站的修订内容,并且没有明显的错误。 按“Q”键,然后按“Y”退出 Lynx Web 浏览器。

配置第二个网站

现在您可以设置第二个网站了。 使用以下命令创建一个新的网站目录结构

[root@testvm1 html]# mkdir -p /var/www/html2

请注意,第二个网站只是与第一个站点位于同一 /var/www 目录中的第二个 html 目录。

现在创建一个新的索引文件, /var/www/html2/index.html,内容如下(此索引文件略有不同,以区别于原始网站的索引文件)

<h1>Hello World -- Again</h1> 

Web site 2.

httpd.conf 中为第二个网站创建一个新的配置节,并将其放置在上一个虚拟主机节的下方(这两个节应非常相似)。 此节告诉 Web 服务器在哪里可以找到第二个站点的 HTML 文件。

<VirtualHost 127.0.0.1:80>
    DocumentRoot /var/www/html2
    ServerName www.site2.org
</VirtualHost>

再次重新启动 HTTPD,并使用 Lynx 查看结果。

[root@testvm1 httpd]# systemctl restart httpd
[root@testvm1 httpd]# lynx www.site2.org

                                    Hello World -- Again

   Web site 2.

<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list

这里我压缩了结果输出以适应这个空间。 页面中的差异表明这是第二个网站。 要同时显示两个网站,请打开另一个终端会话,并使用 Lynx Web 浏览器查看另一个站点。

其他注意事项

这个简单的示例演示了如何使用单个 Apache HTTPD 服务器实例提供两个网站。 当考虑其他因素时,配置虚拟主机会变得更加复杂。

例如,您可能希望为一个或两个网站使用一些 CGI 脚本。 为此,您将在 /var/www 中为 CGI 程序创建目录:/var/www/cgi-bin/var/www/cgi-bin2,以与 HTML 目录命名保持一致。 然后,您需要将配置指令添加到虚拟主机节,以指定 CGI 脚本的目录位置。 每个网站也可以具有从中可以下载文件的目录; 这也需要在适当的虚拟主机节中添加条目。

Apache 网站介绍了管理多个网站的其他方法,以及从性能调整到安全性的配置选项。

Apache 是一个强大的 Web 服务器,可用于管理从简单到高度复杂的网站。 尽管其总体份额正在萎缩,但 Apache 仍然是 Internet 上最常用的 HTTPD 服务器。

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演说家。 自 1996 年以来,他一直从事 Linux 和开源软件的工作,自 1969 年以来一直从事计算机工作。他强烈拥护并宣传“系统管理员的 Linux 哲学”。

2 条评论

既然你提到了 /etc/httpd/conf.d,为什么不使用它呢?即:
conf.d/00-default.conf - 默认站点的设置
conf.d/01-www.site2.org.conf - www.site2.org 的设置
等等。
这样您就不必担心 Apache 的后续版本对 conf/httpd.conf(如 conf/httpd.conf.rpmnew)进行更改并导致奇怪的问题。

嗨,david,
我也是以前的 os/2 大师,非常感谢你的文章,并一直期待你的新文章。

Creative Commons License这项工作已根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.