返回部落格

在 CentOS 7 上安裝 Apache 網頁伺服器

在 CentOS 7 上安裝 Apache 網頁伺服器

網頁伺服器負責儲存、處理網頁並將其傳送給網站訪客。目前有相當多的 開源網頁伺服器 軟體選擇,但 Apache HTTP 伺服器 被認為是世界上使用最廣泛的網頁伺服器。這是因為除了開源之外,它的模組化架構還允許透過添加模組來擴充其功能,以滿足不同的用途。因此,該網頁伺服器非常強大。

如果您想在 CentOS 7 系統上安裝 Apache,本教學非常適合您。此外,您還將學習如何建立 虛擬主機 ,以便您可以在運行於 CentOS 的單一 Apache HTTP 伺服器上託管多個網站。

這是一篇僅針對 Apache 安裝的詳細教學。如果您正在尋找關於 LAMP 軟體堆疊的條列式教學,我們有這篇關於 如何在 CentOS 7 上安裝 Linux, Apache, MySQL, PHP (LAMP) 的指南供您參考。現在,讓我們開始吧!

先決條件

由於這是一個動手實作的教學,您應該具備以下條件:

步驟 1:安裝 Apache HTTP 伺服器

您可以在 CentOS 的預設套件庫中找到 Apache。因此,使用 yum 套件管理器進行安裝非常簡單。根據先決條件部分,您需要使用非 root 使用者登入。在終端機中執行以下命令以更新本地的 Apache httpd 套件索引:

套件更新完成後,輸入以下命令來安裝 Apache:

確認安裝並等待 yum 安裝 Apache 及其所需的相依套件。

如果您按照關於 在 CentOS 7 上使用 FirewallD 設定防火牆 的教學步驟,並為連接埠 80 啟用了防火牆,那麼您就可以繼續了。 Firewalld 是 CentOS 的防火牆管理器。否則,您可以透過輸入以下命令來啟用 firewalld 的 http(連接埠 80)服務:

如果您計劃透過安全的 HTTPS 傳輸流量,則可以透過輸入以下命令來啟用 firewalld 的 https(連接埠 443)服務:

最後,您必須重新載入 firewalld 以使變更生效。以下是重新載入的命令:

至此,您已安裝並配置好 Apache,可以根據您是否執行了上述命令來透過 HTTP 或 HTTPS 傳輸流量。

步驟 2:確認 Apache 網頁伺服器正在運行

在 CentOS 中,Apache 程序在安裝後不會自動啟動。要手動啟動 Apache,請輸入以下命令:

要驗證服務是否成功啟動,請透過輸入以下命令來檢查狀態:

如果服務正在運行,您應該會看到類似下方螢幕截圖的輸出。請注意 active(作用中)狀態:

httpd status

輸出顯示該服務已成功啟動且正在運行。接下來,我們還必須測試 Apache 是否可以向網際網路使用者提供網頁。Apache 附帶一個預設網頁,您可以使用它來測試是否可以透過網際網路存取您的伺服器。

如果您還不知道伺服器的公用 IP 位址,則需要找到它。您將在瀏覽器的網址列中使用此 IP 位址來請求預設的 Apache 網頁。您可以透過輸入以下命令來顯示主機的網路位址:

從您取得的位址清單中,您可以在瀏覽器中嘗試每一個以確認它們是否正常運作。或者,您也可以使用 curl 來從 icanhazip.com 獲取您的 IP 位址。以下命令會輸出從其他網路位置的電腦上所看到的公網 IP 位址:

取得伺服器的公網 IP 位址後,將其複製並貼上到瀏覽器的網址列中:

您的瀏覽器應該會載入預設的 CentOS 7 Apache 網頁:

web server home page

如果您能夠載入預設的 Apache 網頁,這表示您的伺服器運作正常。如果您向下捲動,可以看到一些關於 Apache 檔案和目錄位置的基本資訊。在服務安裝並正常運作後,您應該能夠使用各種 systemctl 命令來管理該服務。 

步驟 3:管理 Apache 服務

在本節中,我們將向您展示一些基本的 Apache 管理命令。以下是停止網頁伺服器的命令:

以下是啟動網頁伺服器的命令:

接下來,這是重新啟動網頁伺服器(停止並啟動)的命令:

在此之後,我們將向您展示重新載入 Apache 服務的命令。當您只是進行設定變更時,此命令是必需的。透過重新載入,Apache 程序將套用設定變更,而不會像重新啟動那樣中斷連線:

根據預設設定,Apache 會在伺服器開機時自動啟動。如果您想變更此行為,以下是停用開機時啟動服務的命令:

若要重新啟用開機時啟動服務,請輸入以下命令: 

步驟 4:設定 Apache 虛擬主機

預設情況下,Apache 設定為託管並提供單一網站。在大多數情況下,您會希望您的網頁伺服器提供並託管多個網站。例如,您可能擁有子網域,或者您可能想為您的主要公司/組織網站設定一個部落格頁面。這就是 Apache 虛擬主機發揮作用的地方。Apache 虛擬主機使您能夠設定網頁伺服器以提供多個網站。Apache 虛擬主機相當於 Nginx 伺服器中的伺服器區塊

在本教學中,我們將向您展示如何使用 example.com 作為我們的網域。當然,example.com 網域在網際網路上無法運作,因此您應該將其替換為您的實際網域——步驟是相同的。 

當您在 CentOS 上安裝 Apache時,它會安裝一個虛擬主機,該主機設定為提供來自 /var/www/html 目錄的內容。如果您託管單一網站,此設計運作良好。然而,我們希望能夠託管多個網站。我們將保留預設的 /var/www/html 目錄,而是在 /var/www 位置中為 example.com 網域建立另一個目錄。保留預設目錄的原因是,當用戶端請求與您使用虛擬主機設定的任何其他網站都不相符時,它會提供服務。此外,如果您想停用已建立的虛擬主機,預設仍會繼續處理流量。 

首先,在 /var/www 內為您的網域名稱建立一個目錄。您可以自由選擇您喜歡的名稱。然而,建議選擇與您的網域相似的名稱,以便在建立虛擬主機 conf 檔案時便於記憶。輸入以下命令以建立範例目錄:

輸入以下命令以建立一個額外的資料夾,用於存放該網站的記錄檔:

在網站目錄就緒後,請使用以下命令並透過 $USER 環境變數來分配目錄的所有權:

執行以下命令以確保您的網頁根目錄具有預設權限:

現在,建立一個簡單的 index.html 頁面,使用 nano 在 example 目錄中,請輸入以下命令:

在 nano 編輯器中,新增以下 HTML 程式碼片段:

完成後,按下 Ctrl O 並按下 ENTER。您現在可以關閉編輯器,只需按下 Ctrl X

到目前為止,我們已經建立了您的網站目錄和基本網頁來測試虛擬主機。接下來,我們要建立虛擬主機設定檔。虛擬主機檔案指定了您想在單一 Apache 伺服器上託管的各個網站的設定。它們會將設定的網域名稱請求導向其特定的目錄。

虛擬主機檔案儲存在 /etc/httpd/sites-available 目錄中。已啟用的虛擬主機檔案會從 /etc/httpd/sites-available 目錄符號連結到 /etc/httpd/sites-enabled 目錄。這兩個目錄在 CentOS 中預設不會建立,因此您必須自行建立。輸入以下命令以建立目錄:

目錄建立好之後,指示 Apache 在 sites-enabled 目錄中尋找虛擬主機。您將透過修改 Apache 的主設定檔來完成此操作。輸入以下命令以在 nano 編輯器中開啟該檔案:

我們要新增一行,指示 Apache 在選用目錄中尋找其他設定檔。捲動到檔案底部,並在末尾新增以下行:

按下 Ctrl O 並按下 ENTER 儲存檔案。您現在可以關閉編輯器,只需按下 Ctrl X。下一步是在 sites-available 目錄中建立虛擬主機檔案。輸入以下命令以使用 nano 編輯器建立並開啟新檔案:

在開啟的檔案中,新增以下設定區塊。請記得將我們的 example.com 替換為您實際的網域名稱,如果您在 /var/www/example 中使用了不同的目錄名稱,也請進行相應的更新:

如您所見,我們已經指定了網域名稱以及該網域要提供服務的檔案所在的網頁根目錄。我們還指定了錯誤記錄檔的位置——這將在您進行伺服器疑難排解時提供協助。

一旦我們在 sites-available 目錄中建立了虛擬主機檔案,下一步就是透過建立指向 sites-enabled 目錄的符號連結來啟用該檔案。輸入以下命令以建立符號連結:

如果您已按照上述步驟操作,您的虛擬主機現在應該已經準備好提供您的網站內容。然而,在虛擬主機開始運作之前,您還需要配置一項檢查。我們將在接下來的內容中進行說明。

步驟 5:調整 SELinux 權限以允許虛擬主機

Linux 發行版包括 Fedora、RHEL 和 CentOS 預設都隨附 SELinux。SELinux (Security Enhanced Linux) 是一種適用於 Linux 系統的安全架構,它限制並定義了伺服器應如何處理請求,以及使用者應如何與通訊端 (socket)、網路連接埠和基本目錄進行互動。

在預設情況下,SELinux 可以與預設的 Apache 配置協同工作。然而,由於您建立了自訂的虛擬主機(包括自訂記錄目錄),當您嘗試重新啟動 Apache 服務時,系統將會拋出服務錯誤。解決方案是修改 SELinux 策略,以允許 Apache 服務寫入必要的檔案。

SELinux 讓 CentOS 成為高度安全的伺服器。因此,我們不建議完全停用它。鑑於 SELinux 允許您以各種方式自訂安全層級,建議您僅根據環境需求來更新或設定策略。

您有兩種更新 Apache 策略的選擇:全域 或是針對 特定目錄。更新特定目錄的策略更為安全。因此,這是推薦的選項。

  • 全域更新 Apache 策略

您可以全域修改 Apache 策略,這將透過使用 httpd_unified 布林值來指示 SELinux 以相同的方式處理所有 Apache 程序。請記住,全域修改 Apache 策略不會像針對每個目錄進行特定設定那樣提供相同層級的控制。然而,在維護方面它更為便利。執行以下命令以全域更新 Apache 策略:

讓我們來定義此命令中的值所代表的作用:

  • setsebool – 更新 SELinux 布林值。
  • -P 標籤 – 更新開機時的值,以便此變更在重新開機後依然有效。
  • httpd_unified – 指示 SELinux 將所有 Apache 程序視為相同類型的布林值。使用值 1 可啟用它。
  • 調整特定目錄的 Apache 策略

如果您希望對目錄有更多控制權,那麼針對每個目錄調整 Apache 策略是正確的方法。然而,這會帶來需要更多維護的額外負擔。這是因為該策略並非全域性的。因此,您需要手動為您在虛擬主機 conf 檔案中指定的任何新記錄目錄設定內容類型 (context type)。

在更新策略之前,首先使用以下命令檢查 SELinux 分配給 /var/www/example/log 目錄的內容類型:

該命令將輸出類似以下的內容,這基本上是該目錄的 SELinux 安全內容 (context):

httpd_sys_content_t 是目前的內容類型,它告訴 SELinux,Apache 程序僅被允許讀取在此目錄中建立的檔案。由於在我們的虛擬主機配置中,我們希望 Apache 能夠寫入 /var/www/example/log 目錄中的記錄檔,因此我們將修改此策略,以允許 Apache 產生並附加到網頁應用程式記錄檔。允許此操作的內容類型是 httpd_log_t。以下是更新內容類型的命令:

若要套用上述命令的變更並使其在開機後依然有效,請執行以下命令:

讓我們來定義此命令的作用:

  • restorecon – 套用變更並確保其在重新開機後依然有效。
  • -R 旗標 – 將遞迴執行指令,更新任何現有檔案以使用新的安全內容。
  • -v 旗標 – 在指令執行後印出安全內容的變更。它將輸出類似以下的內容:
若要檢視安全內容的變更,您可以再次執行以下指令:
您應該會在輸出中看到更新後的安全內容類型:
更新 SELinux 目錄策略以允許 Apache 寫入日誌目錄後,我們現在可以測試虛擬主機了。 

步驟 6:測試虛擬主機設定

在測試虛擬主機之前,您需要重新啟動 Apache 服務。以下是相關指令:

接下來,使用以下指令列出日誌目錄的內容:

它應該會顯示類似以下的內容,表示 Apache 已建立日誌檔案: 

list log files web server

如果您一直按照步驟操作到現在,當您造訪虛擬主機檔案中定義的網域名稱時,Apache 現在應該能夠提供範例 HTML 網頁。如果您願意,可以重複步驟 4 和 5 來設定其他網域並相應地更新其 SELinux 權限。

結論

在本教學中,我們安裝了 Apache,學習了如何更新 SELinux 策略以允許 Apache 寫入自訂日誌檔案,並在最後測試了我們的設定以確認其正常運作。有了這些基礎,您應該能夠在此之上進行建構,並提供具有更豐富體驗的更佳應用程式。 

如果您想探索完整的網頁技術棧,請查看我們的教學課程:如何在 CentOS 7 上安裝 LAMP 系統

祝您使用愉快!

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。