如何在 Ubuntu 18.04 上设置 Apache 虚拟主机

在本教程中,我们将提供有关如何在 Ubuntu 18.04 上设置 Apache 虚拟主机的分步说明。

Apache 虚拟主机允许您在一台计算机上运行多个网站。使用虚拟主机,您可以指定站点文档根目录(包含网站文件的目录),为每个站点创建单独的安全策略,使用不同的 SSL 证书等等。

虽然本教程是为 Ubuntu 18.04 Bionic Beaver 编写的,但 Ubuntu 16.04 Xenial Xerus 可以使用相同的步骤。

先决条件

在继续本教程之前,请确保您已满足以下先决条件:

创建目录结构

文档根是用来存储带有域名的网站的文件的目录,目录中的文件是用来响应请求的。您可以将文档根目录设置为您想要的任何位置,在本指南中我们将使用以下目录结构:

1
2
3
4
5
6
7
/var/www/
├── domain1.com
│   └── public_html
├── domain2.com
│   └── public_html
├── domain3.com
│   └── public_html

基本上,我们将为我们想要服务器上托管的每个域名在 /var/www 目录中创建一个单独的目录。在每个目录中,我们将创建一个 public_html 存储域网站文件的目录。

首先为域名 example.com 创建根目录:

1
sudo mkdir -p /var/www/example.com/public_html

出于测试目的,还要在域名文档根目录中创建一个文件 index.html

打开编辑器并创建演示文件 /var/www/example.com/public_html/index.html

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Welcome to example.com</title>
</head>
<body>
<h1>Success! example.com home page!</h1>
</body>
</html>

在本指南中,我们以 sudo 用户身份运行命令,新创建的文件和目录由 root 用户拥有。

为避免任何权限问题,我们为域名文档根目录更改所有权为 apache user (www-data):

1
sudo chown -R www-data: /var/www/example.com

创建虚拟主机

默认情况下,在 Ubuntu 系统上, Apache 虚拟主机配置文件存储在 /etc/apache2/sites-available 目录中,可以通过创建指向 /etc/apache2/sites-enabled 目录的符号链接来启用。

打开您选择的编辑器并创建以下基本虚拟主机配置文件: /etc/apache2/sites-available/example.com.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/example.com/public_html

<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>

ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
  • ServerName:应与此虚拟主机配置匹配的域。这应该是您的域名。
  • ServerAlias:所有其他应与此虚拟主机匹配的 www 域,例如子域。
  • DocumentRoot: Apache 中提供网站文件的目录。
  • Options此指令控制特定目录中可用的服务器功能。
    • -Indexes:防止目录列表。
    • FollowSymLinks:此选项告诉您的 Web 服务器遵循符号链接。
  • AllowOverride:指定 .htaccess 文件中声明的哪些指令可以覆盖配置指令。
  • ErrorLogCustomLog:指定日志文件的位置。

您可以根据需要命名配置文件,但最佳做法是使用域名作为虚拟主机配置文件的名称。

要启用新的虚拟主机文件,我们需要创建从虚拟主机文件到 sites-enabled 目录的符号链接,该目录在启动期间由 apache2 读取。

启用虚拟主机的最简单方法是使用 a2ensite 帮助程序:

1
sudo a2ensite example.com

另一个选项是手动创建符号链接,如下所示:

1
sudo ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/

完成后,测试配置是否存在任何语法错误:

1
sudo apachectl configtest

如果没有错误,您将看到以下输出:

1
Syntax OK

重新启动 Apache 服务以使更改生效:

1
sudo systemctl restart apache2

最后要验证一切是否按预期工作,在您选择的浏览器中打开 http://example.com ,您将看到如下内容:

结论

您已经学习了如何创建 apache 虚拟主机配置以在单个 Ubuntu 服务器上托管多个域。您可以重复上面概述的步骤,并为您的所有域创建其他虚拟主机。