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

本教程说明如何配置Apache虚拟主机在CentOS 8。包括创建Apache的文档根目录,创建Apache虚拟主机,说明Apache虚拟主机常见指令如DocumentRoot,ServerName,Directory。自定义Apache日志格式与存储目录。使用apachectl命令验证配置文件语法。

先决条件

在继续学习本教程之前,请确保您满足这些要求,一个域名指向您的服务器IP。已经在CentOS系统上安装的Apache。您以root或具有sudo权限的用户登录。

创建目录结构

文档根目录DocumentRoot是一个目录,用于存储指向该域名的网站文件,以响应请求。你可以将文档根目录设置为所需的任何位置,但apache用户必须具有读取权限。

我们将使用以下目录结构作为示例,具体目录结构请参数自己需求而定:

/var/www/
├── example.com
│   └── public_html
├── example2.com
│   └── public_html
├── example3.com
│   └── public_html

对于将在服务器上托管的每个域,我们将在/var/www中创建一个单独的目录。在域目录中,我们将创建public_html目录,该目录将成为指向该域名的文档根目录并存储该网站的文件。

我们将使用域名example.com作为示例创建一个Apache主机,首先从为域名example.com使用mkdir命令创建文档根目录。你将运行以下命令:

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

出于测试目的,使用你喜欢的编辑器,在域的文档根目录/var/www/example.com/public_html中创建一个index.html文件,在本教程我们将使用vim编辑器创建文件index.html

sudo vim /var/www/example.com/public_html/index.html

然后将以下代码复制并粘贴/var/www/example.com/public_html/index.html文件中:

<!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>
/var/www/example.com/public_html/index.html

index.html文件非常简单,在浏览器打开仅显示Success! example.com home page!。修改完成后,保存并退出vim编辑器

为避免权限错误的问题,请使用chown命令将文档根目录的所有文件更改为apache用户所有,如果文件存在权限问题,Apache服务器将会返回HTTP状态码为500内部服务器错误

以下chown命令将递归修改目录/var/www/example.com目录下的所有文件,并归apache用户所拥有:

sudo chown -R apache: /var/www/example.com

创建虚拟主机

有几种方法可以设置虚拟主机。第一种是将所有虚拟主机指令添加到一个文件中,第二种是为每个虚拟主机指令创建一个新的配置文件。通常,您应该选择第二种方法,因为这种方法更易于维护。

默认情况下,Apache会加载/etc/httpd/conf.d/目录中所有以.conf结尾的配置文件。要为指定的网站创建Apache虚拟主机,你可以在改目录添加以.conf结尾的文件。

例如我们将为example.com创建虚拟主机配置文件,请使用你喜欢的编辑器创建虚拟主机配置之/etc/httpd/conf.d/example.com.conf。在本教程我们将继续使用vim编辑器创建文件/etc/httpd/conf.d/example.com.conf

请使用root或者sudo用户运行以下vim命令创建文件example.com.conf

sudo vim /etc/httpd/conf.d/example.com.conf

复制并粘帖以下内容到/etc/httpd/conf.d/example.com.conf虚拟主机配置文件中:

<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 /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
/etc/httpd/conf.d/example.com.conf

ServerName指令是Apache虚拟主机所使用的域名。ServerAlias指令允许你为Apache虚拟主机指定多个域名或者子域。例如www子域。

DocumentRoot指令设置Apache虚拟主机文档根目录,当在浏览器打开你的域名时,将此目录检索文件。

Options指令控制Apache虚拟主机每个目录的能力,例如目录是否可索引。是否跟随软连接,包含其它Apache模块,是否允许执行CGI脚本等。

-Indexes表示防止列出目录。FollowSymLinks此选项告诉Web服务器遵循符号链接。AllowOverride指定.htaccess文件中声明的指令可以覆盖配置指令。

最后两行指定日志文件的存储位置,这里分别定义错误日志文件和自定义文件的位置。ErrorLog错误日志文件保存在/var/log/httpd/example.com-error.logCustomLog还允许你指定日志格式,这里使用Apache预设日志格式combined

现在你已经了解每一个选项含义,当修改完成后,保存并退出vim编辑器。对于配置最后需要值得参考的是。您可以根据需要命名配置文件。最佳做法是将域名用作虚拟主机配置文件的名称。

当完成对Apache配置文件修改后,第一件事是首先测试所有Apache配置文件是否正确,不是重启Apache以验证配置是否可用。

Apache提供apachectl命令可用于对配置文件语法的验证,使用以下apachectl命令测试配置文件的语法:

sudo apachectl configtest

如果没有错误,则输出应如下所示:

Syntax OK

要激活新创建的虚拟主机,请使用以下systemctl命令重新启动Apache服务:

sudo systemctl restart httpd

浏览器打开http://example.com ,你将会看到Success! example.com home page!

结论

在本教程中,我们向您展示了如何在CentOS 8上创建Apache虚拟主机配置文件。您可以重复上述步骤,并为所有域名创建其它虚拟主机。如有任何疑问,请随时发表评论。