在我上一篇文章中,我解释了如何为单个网站配置 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 服务器。
2 条评论