如何在CentOS 8上安装带虚拟主机的Apache

Apache網頁伺服器是一個開源且流行的HTTP網頁伺服器,在主機業界擁有廣泛的市場份額。它搭載了許多功能,包括模組增強、多協議支援、簡化配置和多語言支援等等。

閱讀更多: 如何在CentOS 8上安裝Nginx

在本指南中,我們將指導您在CentOS 8RHEL 8上設置Apache網頁伺服器以及虛擬主機環境。在撰寫本教程時,最新版本的Apache是Apache 2.2.43

安裝Apache網頁伺服器

首先,請使用以下dnf指令更新您的CentOS 8RHEL 8系統套件清單。

$ sudo dnf update

更新完成後,執行以下命令安裝Apache網頁伺服器。

$ sudo dnf install httpd

安裝完成後,您可以運行rpm指令來驗證Apache的版本。

$ rpm -qi httpd
Verify Apache Version

該指令將打印出一系列信息,例如套件的版本、發布日期、建構和架構。

啟動Apache HTTP網頁服務,執行systemctl命令

$ sudo systemctl start httpd

要確認服務是否運行,執行。

$ sudo systemctl status httpd
Verify Apache Service Status

從輸出中,綠色的“active”狀態表示Apache網頁伺服器正在運行。

為了消除對網頁伺服器正在運行的任何疑慮,請通過瀏覽您的伺服器IP地址或域名來請求Apache的測試頁面,如下所示。

http://server-ip  

您可以通過執行ifconfig命令來獲取您的伺服器IP。如果您的伺服器位於雲端,您可以通過執行curl命令來獲取公共IP。

$ curl ifconfig.me 
OR
$ curl -4 icanhazip.com
Find CentOS Server IP Address

當您瀏覽伺服器的IP地址時,應該顯示以下網頁。

Check Apache Webpage

這是對網頁伺服器運行的確認。

管理Apache網頁伺服器

安裝並運行Apache後,您可以使用systemctl檢查工具來管理Apache。

例如,要停止Apache,執行命令:

$ sudo systemctl stop httpd

要再次啟動服務,執行:如果您已對任何配置文件進行更改並且需要重新啟動以應用更改,請執行命令:

$ sudo systemctl start httpd

如果您已对任何配置文件进行更改,并且需要重新启动以应用更改,请执行以下命令:

$ sudo systemctl restart httpd

重新启动服务通常会导致服务中断。一个更好的选择是在连接无中断的情况下简单地重新加载。

$ sudo systemctl reload httpd

要在启动或重新启动时自动启动Apache Web服务器,请运行以下命令。这将确保Apache无需您的干预自动启动。

$ sudo systemctl enable httpd

如果选择不自动启动服务,请运行:

$ sudo systemctl disable httpd

设置Apache虚拟主机

默认情况下,Apache Web服务器被配置为仅提供或托管一个网站。如果只想托管一个网站,则此步骤不是必需的。但如果您计划在服务器上托管多个域名,则需要配置Apache虚拟主机。

A virtual host is a separate file that contains configurations that allow you to set up a separate domain from the default one. For this guide, we will set up a virtual host for the domain crazytechgeek.info.

默认虚拟主机位于/var/www/html目录。这仅适用于单个站点。为我们的域创建一个独立的虚拟主机,我们将在/var/www目录中创建另一个目录结构。

$ sudo mkdir -p /var/www/crazytechgeek.info/html

此外,您还可以创建一个用于存储日志文件的目录。

$ sudo mkdir -p /var/www/crazytechgeek.info/log

接下来,按照所示使用$USER环境变量编辑文件权限。

$ sudo chown -R $USER:$USER /var/www/crazytechgeek.info/html

还要调整Web根目录的权限,如所示。

$ sudo chmod -R 755 /var/www

接下来,按照所示创建一个示例index.html文件。

$ sudo vim /var/www/crazytechgeek.info/html/index.html

在键盘上按下字母'i',并粘贴一些示例内容,如所示,将在测试虚拟主机时在Web浏览器

<html>
  <head>
    <title>Welcome to crazytechgeek.info!</title>
  </head>
  <body>
    <h1>Success! The crazytechgeek.info virtual host is up and perfectly working!</h1>
  </body>
</html>

保存並退出配置文件。

使用示例索引文件和站點目錄創建後,您現在可以繼續並創建虛擬主機文件。虛擬主機文件將包含您的域名站點配置,並指示Apache如何回應客戶端的請求。

虛擬主機文件將包含您的域名站點配置,並指示Apache如何回應客戶端的請求。但在繼續之前,您需要創建2個目錄: sites-availablesites-enabled 目錄。

虛擬主機文件將存儲在 sites-available 目錄中,而 sites-enabled 目錄將包含指向虛擬主機的符號鏈接。

按照所示創建這兩個目錄。

$ sudo mkdir /etc/httpd/sites-available
$ sudo mkdir /etc/httpd/sites-enabled

接下來,修改Apache Web服務器的主配置文件,並指示Apache在sites-enabled目錄中定位虛擬主機。

$ sudo vim /etc/httpd/conf/httpd.conf

在配置文件的最末添加如下行。

IncludeOptional sites-enabled/*.conf

保存並退出。

現在按照以下方式創建虛擬主機文件:

$ sudo vim /etc/httpd/sites-available/crazytechgeek.info

粘貼下面的內容,並將 crazytechgeek.info 替換為您自己的域名。

<VirtualHost *:80>
    ServerName www.crazytechgeek.info
    ServerAlias crazytechgeek.info
    DocumentRoot /var/www/crazytechgeek.info/html
    ErrorLog /var/www/crazytechgeek.info/log/error.log
    CustomLog /var/www/crazytechgeek.info/log/requests.log combined
</VirtualHost>

保存並退出文件。

現在通過在 sites-enabled 目錄中創建符號鏈接來啟用虛擬主機文件。

$ sudo ln -s /etc/httpd/sites-available/crazytechgeek.info.conf /etc/httpd/sites-enabled/crazytechgeek.info.conf

調整虛擬主機的SELinux權限

CentOS 8RHEL 8 配備了 SELinux,這是一個用於加固 Linux 系統安全性的安全模塊。由於您在上一步中配置了自定義的 日誌 目錄,因此您需要更新一些 SELinux 策略,以指示 Apache Web 伺服器寫入該目錄。

調整 SELinux Apache 策略有兩種方法:調整普遍的策略和目錄上的策略。後者更受歡迎,因為它更加方便。

在目錄上調整 SELinux 策略

編輯日誌目錄的 SELinux 權限可以給您絕對控制權,以控制 Apache Web 伺服器的策略。這種方法相當冗長,需要您手動配置虛擬主機配置文件中指定的其他目錄的上下文類型。

在開始之前,首先確認 SELinux 分配給日誌目錄的上下文類型:

$ sudo ls -dlZ /var/www/crazytechgeek.info/log/

輸出應與以下類似。

Set SELinux Policies on Apache Log Directory

從輸出中,設置的上下文是 httpd_sys_content_t。這表示 Web 伺服器僅能讀取日誌目錄中的文件。您需要將此上下文更改為 httpd_log_t 以啟用 Apache 生成並將日誌條目添加到該目錄中。

因此,執行以下命令:

$ sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

如果您遇到以下错误”semanage: command not found“。

这意味着未安装提供semanage命令的软件包。要解决此错误,您需要安装这些软件包。但首先,请通过运行以下命令检查提供semanage命令的软件包:

$ sudo dnf whatprovides /usr/sbin/semanage

输出会告诉我们提供semanage命令的软件包是policycoreutils-python-utils

现在按照所示使用DNF软件包管理器安装该软件包。

$ sudo dnf install policycoreutils-python-utils

更改上下文的命令现在应该可以正常工作。

$ sudo semanage fcontext -a -t httpd_log_t "/var/www/crazytechgeek.info/log(/.*)?"

为了保存更改并使其持久化,发出restorecon命令如下:

$ sudo restorecon -R -v /var/www/crazytechgeek.info/log

您可以再次运行命令确认更改:

$ sudo ls -dlZ /var/www/crazytechgeek.info/log/
Check SELinux Context Type

请注意,上下文类型已更改为httpd_log_t,如输出所示。

重新启动Apache以应用更改。

$ sudo systemctl restart httpd

您现在可以通过列出其内容来确认Apache是否正在将日志文件保存在日志目录中:

$ ls -l /var/www/crazytechgeek.info/log/

您应该能够看到两个日志文件,如下所示:错误日志和请求日志文件。

Check Apache Log Files

测试Apache虚拟主机

最后,您需要确保Apache Web服务器正在提供您的虚拟主机文件。要执行此操作,请打开浏览器并转到服务器的IP地址或域名:

http://domain-name
Check Apache Virtual Host for Website

完美!這表示一切進展順利,我們的虛擬主機正在按預期運行。

結論

在本指南中,我們已經學會了如何在CentOS 8RHEL 8上安裝Apache網頁伺服器,以及如何配置虛擬主機檔案以提供額外域名的內容。隨意配置多個虛擬主機檔案,以滿足您認為合適的額外域名需求。

如果您想建立完整的主機堆疊,我建議您在CentOS 8上安裝LAMP堆疊

Source:
https://www.tecmint.com/install-apache-with-virtual-host-on-centos-8/