如何在 CentOS 8 上安装 Apache 服务器和配置虚拟主机

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

如何在 CentOS 8 上安装 Apache 服务器和配置虚拟主机
如何在 CentOS 8 上安装 Apache 服务器和配置虚拟主机

在本文中,我们将介绍如何在 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

如果正常将看到如下欢迎网页:

如何在 CentOS 8 上安装 Apache 服务器和配置虚拟主机

如果看到这个页面,说明 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 服务器上配置虚拟主机。

使用 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 为您的虚拟主机制定了正确的策略。

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 上下文类型。

使用上面的方法更新 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.logrequests.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 服务器上安装 Apache 服务器并配置虚拟主机。现在您就可以使用相同的步骤,在自己的服务器上配置虚拟主机。

在本文中我们仅创建了一个虚拟主机,您可以重复相同的步骤来创建多个虚拟主机,这样就可以在一台 CentOS 8 服务器上,部署多个网站或其他项目。

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-install-apache-and-config-vhost-on-centos-8/

(0)
上一篇 21小时前

相关推荐

发表评论

登录后才能评论