Apache 服务器是世界上使用最广泛的 Web 服务器。它提供了许多强大的功能,包括可动态加载的模块、强大的媒体支持以及与其他流行软件的广泛集成等等。

在本文中,我们将介绍如何在 CentOS 8 服务器上安装带 Apache 服务器和配置虚拟主机。
环境条件
本文介绍的内容基于以下环境条件:
- CentOS 8 操作系统。
- 在服务器上具有 sudo 权限的非 root 用户。
第 1 步 — 安装 Apache
Apache 在 CentOS 8 的软件存储库中默认可用,可以直接使用dnf
包管理器安装它。
执行下面的命令安装 Apache :
sudo dnf install httpd
执行上面命令安装后,dnf
将安装 Apache 和所需的依赖项。
配置防火墙打开 http 和 https 服务:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
接下来,重新加载防火墙以使这些新规则生效:
sudo firewall-cmd --reload
防火墙重新加载后,就可以启动 Apache 服务了。
第 2 步 — 启用 Web 服务器
安装完 Apache 后,它不会在 CentOS 上自动启动。因此,需要手动启动 Apache 进程:
sudo systemctl start httpd
使用以下命令,检查 Apache 服务的运行状态:
sudo systemctl status httpd
如果服务正常运行,将收到一个active
状态提示:
Output
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disa>
Active: active (running) since Thu 2020-04-23 22:25:33 UTC; 11s ago
Docs: man:httpd.service(8)
Main PID: 14219 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 5059)
Memory: 24.9M
CGroup: /system.slice/httpd.service
├─14219 /usr/sbin/httpd -DFOREGROUND
├─14220 /usr/sbin/httpd -DFOREGROUND
├─14221 /usr/sbin/httpd -DFOREGROUND
├─14222 /usr/sbin/httpd -DFOREGROUND
└─14223 /usr/sbin/httpd -DFOREGROUND
...
如上面输出所示,Apache 服务已成功启动。
最好在通过浏览器访问服务器 IP 地址,测试是否能打开 Apache 的欢迎页面。如果可以正常打开 Apache 欢迎页面,说明它运行正常。如果您不知道服务器的 IP 地址,可以通过下面的命令获取。
键入q
以返回命令提示符,然后键入:
hostname -I
此命令将显示服务器的所有网络地址,因此将返回几个以空格分隔的 IP 地址。您可以在 Web 浏览器中尝试每种方法,以确定它们是否有效。
或者执行下面的命令,也可以获取服务器的公共 IPv4 地址:
curl -4 icanhazip.com
获得服务器的 IP 地址后,输入到浏览器的地址栏访问:
http://your_server_ip
如果正常将看到如下欢迎网页:

如果看到这个页面,说明 Apache 工作正常。
第 3 步 — 管理 Apache 进程
现在 Apache 已安装并正常运行,可以使用下面的 systemctl 命令来管理 Apache 服务。
要停止 Apache 服务器:
sudo systemctl stop httpd
要在 Apache 服务器停止状态时启动它,请执行:
sudo systemctl start httpd
要重新启动 Apache 服务,请执行:
sudo systemctl restart httpd
如果只是进行配置更改,只要重新加载 Apache,即可使更改生效 。为此,请执行以下命令:
sudo systemctl reload httpd
默认情况下,Apache 被配置为在服务器启动时自动启动。如果不想这样,我们也可以关闭自动启动:
sudo systemctl disable httpd
要重新开启 Apache 在服务器启动时自动启动,请执行:
sudo systemctl enable httpd
Apache 的默认配置适合托管单个网站。如果想在服务器上托管多个网站,则需要在 Apache 服务器上配置虚拟主机。
第 4 步 — 设置虚拟主机(推荐)
使用 Apache 服务器时,可以配置虚拟主机,它类似于 Nginx 的服务器配置块,用来配置服务器以托管多个网站。
在 CentOS 8 服务器上,Apache 的默认配置适合托管一个网站,其将/var/www/html
设置为网站根目录。但如果想要托管多个网站,这样的配置方式可能会有问题。
接下来,我们以 example.com
为例,为该站点创建一个网站目录,并为其配置虚拟主机。
首先,创建一个如下所示的html
目录,使用 -p
参数创建必要的父级目录:
sudo mkdir -p /var/www/example.com/html
创建另一个目录用来存储网站的日志文件:
sudo mkdir -p /var/www/example.com/log
使用环境变量 $USER
,来分配html
目录的所有权:
sudo chown -R $USER:$USER /var/www/example.com/html
为网站根目录设置正确的权限:
sudo chmod -R 755 /var/www
接下来,使用 vi
或其他编辑器创建一个名为index.html
的示例页面:
sudo vi /var/www/example.com/html/index.html
按i
切换到INSERT
模式,并将以下示例 HTML 代码添加到文件中:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
先按ESC
,然后输入:wq
,按ENTER
保存并关闭文件。
创建好网站目录和示例 Html 文件后,就可以创建虚拟主机配置文件了。每个网站对应一个单独的虚拟主机配置文件,并告诉 Apache 服务器如何响应各个网站的请求。
在创建虚拟主机之前,我们先创建一个名为sites-available
的目录来存储配置文件。然后再创建一个名为sites-enabled
的目录,用来告诉 Apache 那些虚拟主机配置文件已被启用。我们只要创建一个从 sites-available
目录指向 sites-enabled
目录的符号链接,即可启用该虚拟主机配置文件。
使用以下命令创建两个目录:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
接下来,还要告诉 Apache 在sites-enabled
目录中查找虚拟主机。为此,使用 vi 或其他文本编辑器编辑 Apache 的主配置文件(httpd.conf),并添加一行指令用来声明虚拟主机配置文件的启用目录:
sudo vi /etc/httpd/conf/httpd.conf
进入文件后按大写G
导航到文件末尾。然后按i
切换到INSERT
模式,并将以下指令行添加到文件的最底部:
/etc/httpd/conf/httpd.conf
...
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
添加完该指令行后,保存并关闭文件。现在就已经有了一个虚拟主机目录,下面来创建虚拟主机配置文件。
首先,在sites-available
目录中创建一个新的配置文件:
sudo vi /etc/httpd/sites-available/example.com.conf
添加以下配置代码,记得将example.com
更改为自己的域名:
/etc/httpd/sites-available/example.com.conf
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>
上面的配置内容将告诉 Apache ,该网站的根目录是哪个文件夹。它还告诉 Apache 在哪里存储站点的错误日志和请求日志。
完成后保存并关闭文件。
现在就已经为 example.com 创建了虚拟主机配置文件,为刚刚在sites-enabled
目录中创建的虚拟主机创建一个符号链接:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
现在就完成了对 example.com 网站的配置。我们可以使用同样的方法,为其他网站创建虚拟主机。在重启 Apache 服务之前,我们 SELinux 为您的虚拟主机制定了正确的策略。
第 5 步 — 调整虚拟主机的 SELinux 权限(推荐)
SELinux 是一个 Linux 内核安全模块,可为 Linux 系统提供更高的安全性。CentOS 8 配备的 SELinux 被配置为使用默认的 Apache 配置。由于我们在虚拟主机配置文件中,设置了自定义日志目录,这更改了默认配置。如果这时启动 Apache 服务,可能收到错误提示。要解决这个问题,需要更新 SELinux 策略以允许 Apache 写入必要的文件。
由于 SELinux 允许用户自定义安全级别,因此有多种方法可以根据环境需求设置策略。有两种调整 Apache 策略的方法:全面调整 Apache 策略和针对目录调整 Apache 策略,后一种策略更加安全,因此推荐后一种方法。
全面调整 Apache 策略
运行以下命令以设置通用 Apache 策略:
sudo setsebool -P httpd_unified 1
setsebool
命令更改 SELinux 布尔值。-P
标志将更新启动时间值,使更改在重新启动后持续有效。httpd_unified
是告诉 SELinux 将所有 Apache 进程视为同一类型的布尔值。
针对目录调整 Apache 策略
为 /var/www/example.com/log
目录单独设置 SELinux 权限,能够更好地控制 Apache 策略,但也可能需要更多维护工作。由于此选项不是通用设置策略,因此只要创建了虚拟主机,就需要手动为其中的任何新日志目录设置上下文类型。
首先,检查 SELinux 给 /var/www/example.com/log
目录的上下文类型:
sudo ls -dlZ /var/www/example.com/log/
此命令列出该目录的 SELinux 上下文类型。将返回类似于以下内容的输出:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_sys_content_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
当前上下文是httpd_sys_content_t
,它告诉 SELinux ,Apache 进程只能读取在该目录中创建的文件。在这里,我们将 /var/www/example.com/loghttpd_log_t
目录的上下文类型更改为 httpd_log_t 。这种类型将允许 Apache 生成并附加日志到应用程序的日志文件中:
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
接下来,使用restorecon
命令应用更改并让它们在重新启动后仍然有效:
sudo restorecon -R -v /var/www/example.com/log
这里的-R
参数可以以递归方式运行此命令,这意味着它将更新所有现有文件以使用新的上下文类型。而-v
参数将打印出命令所做的上下文更改。将会收到以下确认更改的输出内容:
Output
Relabeled /var/www/example.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
可以再次列出上下文以查看更改:
sudo ls -dlZ /var/www/example.com/log/
输出反映了变更后的上下文类型:
Output
drwxr-xr-x. 2 root root unconfined_u:object_r:httpd_log_t:s0 6 Apr 23 23:51 /var/www/example.com/log/
现在 /var/www/example.com/log
目录已在使用 httpd_log_t
上下文类型。
第 6 步 — 测试虚拟主机(推荐)
使用上面的方法更新 SELinux 上下文类型后,Apache 便能够将日志文件写入 /var/www/example.com/log
目录。现在可以重新启动 Apache 服务:
sudo systemctl restart httpd
列出 /var/www/example.com/log
目录的内容以查看 Apache 是否创建了日志文件:
ls -lZ /var/www/example.com/log
可以看到 Apache 已经创建了虚拟主机配置中指定的error.log
和 requests.log
文件:
Output
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 error.log
-rw-r--r--. 1 root root system_u:object_r:httpd_log_t:s0 0 Apr 24 00:06 requests.log
现在已经创建了虚拟主机并更新了 SELinux 权限,Apache 可以正常的为用户的请求服务了。您可以通过访问 http://example.com
域名进行测试,应该会看到如下内容:

总结
在上文中,我们介绍了如何在 CentOS 8 服务器上安装 Apache 服务器并配置虚拟主机。现在您就可以使用相同的步骤,在自己的服务器上配置虚拟主机。
在本文中我们仅创建了一个虚拟主机,您可以重复相同的步骤来创建多个虚拟主机,这样就可以在一台 CentOS 8 服务器上,部署多个网站或其他项目。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-install-apache-and-config-vhost-on-centos-8/