Apache HTTP Server (httpd) 是最受歡迎、最強大的 Web 伺服器之一,以其靈活性、效能和廣泛的功能而聞名。它廣泛用於託管網站和 Web 應用程式。在 CentOS Stream 9 上設定 Apache 可以讓您利用其強大的功能來滿足您的 Web 託管需求。此外,使用 Let's Encrypt 提供的免費 SSL 憑證保護您的網站,可確保您的網站已加密且值得信賴。
若要在 CentOS Stream 9 上安裝 Apache HTTP Server 並設定 Let's Encrypt SSL 證書,請依照本指南中概述的步驟操作。這將為您提供安全且高效的 Web 伺服器配置。
在安裝 Apache 之前確保 CentOS Stream 系統完全更新
在 CentOS Stream 電腦上繼續安裝 Apache 之前,我們必須驗證我們的系統是否完全是最新的。這不僅僅是一項預防措施。更新系統有助於防止相容性問題並顯著增強其穩定性、安全性和效能。
若要付諸實施,請在終端機中執行以下命令:
sudo dnf upgrade --refresh
此指令啟動更新機制,取得並安裝系統的最新軟體更新和安全性修補程式。在繼續安裝 Apache 之前,讓更新過程完全結束至關重要。這可確保您的系統處於最佳狀態、最佳配置並準備好運行 Apache,而不會遇到任何障礙或相容性問題。
透過DNF指令安裝Apache HTTPD
第二步是在 CentOS Stream 系統上安裝 Apache(或 HTTPD)。這是一個簡單的過程,由強大的 DNF 套件管理器提供。 DNF(或 Dandified Yum)軟體套件管理器簡化了軟體套件的安裝、更新和管理。
透過在終端機中執行以下命令來啟動 Apache (HTTPD) 的安裝:
sudo dnf install httpd
此命令啟動安裝機制並取得並安裝所有必要的元件,以允許 Apache (HTTPD) 在您的系統上執行。該過程應在幾分鐘內完成。之後,您將完全安裝 Apache (HTTPD) 並準備使用。
啟動並配置 Apache HTTPD 以在系統引導時運行
在 CentOS Stream 系統上成功安裝 Apache (HTTPD) 後,以下關鍵操作是啟動該服務並將其配置為在系統啟動時自動啟動。 Apache (HTTPD) 始終處於活動狀態,並準備在系統啟動時處理 Web 請求。
如果 Apache (HTTPD) 服務未處於活動狀態或設定為預設運行,請在終端機中使用以下命令來啟動服務並確保它在系統啟動時運行:
sudo systemctl start httpd
sudo systemctl enable httpd
第一個指令 sudo systemctl start httpd 啟動 Apache (HTTPD) 服務,而第二個指令 sudo systemctl enable httpd 將服務設定為在系統引導時自動執行。透過實施這兩個命令,您可以保證 Apache (HTTPD) 始終可存取且處於活動狀態,以便在每次系統啟動時滿足 Web 請求。
作為一種替代方法,您可以將前面的兩個步驟壓縮為一個命令:
sudo systemctl enable httpd --now
指令 sudo systemctl enable httpd –now 中的 –now 選項會同時啟動 Apache (HTTPD) 服務並將其配置為在系統啟動時自動啟動。這個命令統一了前面步驟中的兩個單獨的命令,使過程更加簡化和有效率。
檢查 Apache HTTPD 服務狀態
最後,我們應該使用以下 systemctl 命令來驗證 Apache (HTTPD) 的成功實施和運行:
systemctl status httpd
此命令為您提供 Apache (HTTPD) 服務的即時狀態,包括可能出現的任何錯誤或訊息。透過檢查服務的狀態,您可以確認 Apache (HTTPD) 正在無縫運作。
配置 FirewallD 規則
在 CentOS Stream 上安裝 Apache (HTTPD) 後,您可能會注意到防火牆不包含標準連接埠 80 和 443 的預先設定規則。
使用 Firewall-cmd 工具(CentOS Stream 的預設防火牆管理公用程式)設定防火牆規則。您需要配置的規則將根據您打算使用的連接埠而有所不同。但是,我們在以下步驟中列出了所有關鍵選項。
開啟連接埠 80 和 443
我們將執行前兩個命令來開啟連接埠 80 和 443。
若要開啟連接埠 80 或 HTTP,請執行下列命令:
sudo firewall-cmd --permanent --add-port=80/tcp
接下來,使用以下命令開啟連接埠 443 或 HTTPS:
sudo firewall-cmd --permanent --add-port=443/tcp
驗證防火牆更改
指定要開啟的連接埠後,我們必須指示防火牆實施這些變更。透過使用以下命令重新載入防火牆規則來執行此操作:
sudo firewall-cmd --reload
了解其影響
敏銳地了解系統上開啟連接埠所帶來的安全影響至關重要。透過選擇性地僅開啟必要的端口,您可以增強 Web 應用程式對未經授權的存取和潛在安全威脅的防禦。這強調了為什麼為 CentOS Stream 上的 Apache (HTTPD) 安裝正確配置防火牆規則至關重要。
驗證 Apache HTTPD 訪問
精心配置 Firewalld 後,請確保您可以透過 Web 瀏覽器存取 Apache (HTTPD) 登入頁面。啟動您最喜歡的 Web 瀏覽器並造訪 http://localhost 或 http://your_server_ip。
透過您的伺服器 IP 存取:
http://your_server_ip
或者,透過本機主機存取:
http://localhost
當您精確配置所有內容時,Apache (HTTPD) 預設登入頁面將會迎接您。此頁面顯示一則訊息,確認伺服器按預期運作。該頁面將類似於:
建立和配置虛擬主機
本節將深入探討使用 Apache (HTTPD) 建立虛擬主機的實際情況,Apache 是一種靈活的 Web 伺服器,以其在單一伺服器上託管多個網域的能力而聞名。該實用程式類似於 Nginx 的「伺服器區塊」屬性。在接下來的教學中,我們將說明如何為給定網域(表示為「example-domain.com」)制定虛擬主機。當然,您將用您的特定網域替換此範例網域。
建立虛擬主機有助於獨立管理每個網域的配置。這提供了對 Web 伺服器環境各個方面的控制,包括安全性、效能和自訂設定。如果您的目標是在單一伺服器上託管多個網站或為網站的不同部分維護單獨的設置,這可能會特別有利。透過 Apache (HTTPD),您可以輕鬆設計虛擬主機來滿足這些要求。
建立和配置目錄
開始虛擬主機設定需要建立一個新目錄作為虛擬主機的根資料夾。該目錄的名稱通常與您的網域一致。
例如,如果您的網域是“example.com”,您將使用以下命令產生一個新目錄:
sudo mkdir /var/www/example.com
此命令需要將“example.com”替換為您的網域。因此,該目錄將存放與虛擬主機相關的檔案和資產,包括 HTML 檔案、映像、腳本和其他資源。
為每個虛擬主機設定單獨的目錄有助於區分不同的關注點,這對於安全性和故障排除非常重要。
新目錄可能需要適當的所有權和權限才能允許 Apache (HTTPD) 存取。後續命令設定正確的所有權和權限:
sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com
準備好新目錄後,我們可以設定您的虛擬主機。
建立一個index.html文件
文字編輯器會為您的虛擬主機產生一個index.html 檔案。在我們的教程中,我們將使用 Nano 文字編輯器,但您可以選擇您喜歡的任何文字編輯器。
執行以下命令建立index.html檔案:
sudo nano /var/www/example.com/index.html
在文字編輯器中,開始為 index.html 檔案建立內容。該文件通常充當訪問您網站的使用者的第一個聯絡點。
這是一個簡單的例子:
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Welcome to Example Domain</h1>
<p>This is a sample page for the domain example.com.</p>
</body>
</html>
完成 index.html 檔案的內容後,儲存檔案並退出文字編輯器。對於 nano,可以按 Ctrl + X、Y 和 Enter 來完成。
配置虛擬主機目錄
確保 Apache Web 伺服器的正確目錄設定可以確保無縫且有組織的配置。具體來說,使用“sites-available”和“sites-enabled”目錄。此配置反映了 Nginx 中採用的配置,並促進了有組織且可存取的配置。
若要建立這些目錄,請使用以下命令:
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
隨後,指示 Apache 在「/etc/httpd/sites-available」目錄中尋找虛擬主機檔案:
sudo nano /etc/httpd/conf/httpd.conf
在開啟的設定檔中,在末尾新增「IncludeOptionalsites-enabled/*.conf」行。此行指示 Apache 將所有虛擬主機設定檔包含在「sites-enabled」目錄中。
IncludeOptional sites-enabled/*.conf
或者,您可能需要註解“IncludeOptional conf.d/*.conf”,停用 Apache 搜尋虛擬主機檔案的預設資料夾。這有助於防止任何潛在的混亂。
例子:
#IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
若要儲存檔案並退出,請使用鍵盤組合 CTRL + O,然後使用 CTRL + X。
建立虛擬主機設定檔
接下來,使用文字編輯器,我們將在 /etc/httpd/sites-available/example.com.conf 建立一個虛擬主機設定檔。
sudo nano /etc/httpd/sites-available/example.com.conf
使用您的 ServerName、ServerAlias 和文件根填寫以下設定區塊中的佔位符訊息,然後將其複製到位於 /etc/httpd/sites-available/example.com.conf 的虛擬主機設定檔中。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example_domain
ServerAlias www.example_domain
DocumentRoot /var/www/example.com/
</VirtualHost>
調整伺服器指令以滿足您的特定要求。
步驟5:修改存取權限
若要授予對伺服器的公共存取權限,請在 /etc/httpd/conf/httpd.conf 設定檔中修改 Apache 服務的存取權限。預設配置拒絕存取。如果您忽略此步驟,當人們嘗試造訪您的網站時,您可能會遇到 HTTP 403 錯誤。
sudo nano /etc/httpd/conf/httpd.conf
將以下區塊新增到您的檔案中,確保調整根目錄以符合您自己的根目錄。
<Directory /var/www/example.com/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
若要儲存這些更改,請使用鍵盤組合 CTRL+O 並使用 CTRL+X 退出文字編輯器。
步驟 6:在 CentOS Stream 上啟用 Apache 虛擬主機
要設定虛擬主機,您必須將其啟動作為最後一步。使用下面提供的指令建立從sites-available 目錄到sites-enabled 目錄的符號連結:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/
您需要重新啟動 Apache 服務才能完成啟動程序。
sudo systemctl restart httpd
重新啟動 Apache 服務後,開啟 Web 瀏覽器並導覽至「HTTP://example_domain」。如果您尚未註冊域名,則可以使用 IP 位址(本地或遠端)存取您的網站。如果您正確設定了所有內容,您在 index.html 檔案中建立的登入頁面將會迎接您。
附加命令和提示
安全目錄和文件
設定安全權限
在 CentOS 上的 Apache 中使用檔案和目錄的安全權限至關重要。通常,會授予過多的權限,例如完全的公共存取權限。為了防止安全風險,建議限制權限。對於目錄,請使用 chmod 755
對文件來說, chmod 644
。以下是設定這些權限的命令。請記住,某些應用程式可能需要不同的權限,例如 777
對於 phpBB。
- 對於目錄:
sudo find /var/www/example.com/ -type d -exec chmod 755 "{}" \;
- 對於文件:
sudo find /var/www/example.com/ -type f -exec chmod 644 "{}" \;
這些命令將取代 /var/www/example.com/
與適當的目錄路徑。此步驟並不能保證完全安全,但可以透過防止公眾存取關鍵文件來顯著降低風險。
使用 Let's Encrypt SSL 保護 Apache
安裝 Let's Encrypt SSL 憑證
使用 SSL 憑證保護 Apache 伺服器對於安全的客戶端-伺服器連線是必要的。 Let's Encrypt 提供免費、自動化的 SSL 憑證。首先,請確保啟用 CRB 儲存庫,並安裝 EPEL 儲存庫。 CentOS Stream 9 和 8 之間的安裝過程略有不同。
對於 CentOS Stream 9:
- 啟用CRB:
sudo dnf config-manager --set-enabled crb
- 安裝 EPEL 儲存庫:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
接下來,安裝 mod_ssl
並捕捉:
sudo dnf install mod_ssl
在 CentOS Stream 發行版上啟動 EPEL,然後安裝 Snap。
sudo dnf install snapd -y
安裝後,請確保立即啟用 Snap 並在系統啟動時啟用。
sudo systemctl enable snapd --now
下一步是安裝 snap 核心,它將處理 snap 套件運行所需的所有依賴項。
sudo snap install core
為 snapd 目錄建立符號連結。
sudo ln -s /var/lib/snapd/snap /snap
使用以下終端機指令安裝 Certbot snap 套件。
sudo snap install --classic certbot
最後,為 Certbot snap 套件建立另一個符號連結。
sudo ln -s /snap/bin/certbot /usr/bin/certbot
為 Apache 運行 Certbot
在終端機中執行以下命令以使用 Certbot 產生 SSL 憑證。
sudo certbot --dry-run --apache --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com
對於 Let's Encrypt 的新手,您可以尋求有關命令中縮寫的更多資訊。
- “--dry-run”選項可讓您在不更改系統的情況下執行憑證產生程序的測試運行。該選項對於測試很有價值。
- “–apache”選項是為 Apache Web 伺服器產生憑證。
- 「–agree-tos」選項可讓您接受提供 SSL 憑證的憑證授權單位 Let's Encrypt 的服務條款。
- “--redirect”選項會自動將所有 HTTP 流量重新導向至 HTTPS。
- “-hsts”選項啟用 HTTP 嚴格傳輸安全性 (HSTS)。此安全功能告訴瀏覽器僅透過安全的 HTTPS 連線存取您的網站,有助於防止協定降級攻擊和 cookie 劫持。
- 「–staple-ocsp」選項啟用線上憑證狀態協定 (OCSP) 裝訂,該協定可驗證 SSL 憑證的撤銷狀態,而無需聯絡憑證授權單位。
- 使用「–email」選項指定要與憑證關聯的電子郵件地址。
- 「-d」選項指定您將為其產生憑證的網域名稱。在此範例中,網域名稱是「www.example.com」。
或者,您可以使用以下命令並按照逐步提示進行操作,以獲得更易於存取的體驗。
sudo certbot certonly --apache
透過使用上述參數執行命令,您將指示 certbot 為您的網域「www.example.com」建立 SSL 證書,同時還包括必要的安全功能,例如強制 HTTPS 301 重定向、Strict-Transport-Security 標頭以及OCSP裝訂。需要注意的是,您應該將命令中的電子郵件地址替換為您自己的電子郵件地址,並確保將網域名稱「www.example.com」替換為您所需的網域名稱。
在 Apache 上設定 SSL
取得 SSL 憑證後,設定您的 Apache 伺服器以使用它。編輯 ssl.conf
文件並添加以下行,將“example.com”替換為您的網域:
sudo nano /etc/httpd/conf.d/ssl.conf
在設定檔中,新增以下行:將「example.com」替換為您的網域。
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
儲存變更並重新啟動 Apache 以使設定生效。
sudo systemctl restart httpd
此設定可確保瀏覽器和您的網站之間的加密、安全通訊。
自動更新證書
若要保持 SSL 憑證最新,請設定 cron 作業以進行自動續訂。透過空運行測試更新過程:
sudo certbot renew --dry-run
使用 systemctl list-timers 指令檢查計時器並確認「snap.certbot.renew.timer」存在。
systemctl list-timers snap.certbot.renew.timer
使用指令「systemctl list-timers –all」查看系統上活動和非活動的計時器。此命令概述所有計時器,包括「snap.certbot.renew.timer」。 「snap.certbot.renew.timer」請確保在憑證到期之前自動檢查和續約您的憑證。因此,您可以消除有關續訂過程的擔憂。
systemctl list-timers --all
Apache HTTPD 管理
在您的伺服器上成功設定 Apache 後,為了有效管理,請記住以下一些要點。
Apache 伺服器日誌
Apache 伺服器日誌儲存在 /var/log/httpd/ 目錄中。存取日誌和錯誤日誌的預設檔名分別是 access.log 和 error.log。但是,可以在虛擬主機設定檔中變更這些名稱。
以下是更改虛擬主機設定檔中的 Apache 伺服器日誌的範例。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example.com
# Change access log to custom-access.log
CustomLog /var/log/httpd/custom-access.log combined
# Change error log to custom-error.log
ErrorLog /var/log/httpd/custom-error.log
</VirtualHost>
此範例將存取日誌和錯誤日誌分別變更為 custom-access.log 和 custom-error.log。您可以將日誌檔案的名稱變更為您喜歡的任何名稱,並更新虛擬主機設定檔中的相應路徑。
阿帕契命令
以下是管理 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 HTTPD
若要保持 Apache 更新,請執行您通常用來檢查系統是否為最新的命令。
sudo dnf update --refresh
在執行任何升級之前,備份或建立系統映像非常重要,因為有時可能會發生錯誤。以下命令將刷新所有系統軟體包,包括 Apache,並提示您升級。
如何刪除 Apache HTTPD
若要從系統中卸載 Apache,請使用下列命令。
sudo systemctl disable httpd --now
現在,使用以下命令完全刪除 Apache。
sudo dnf remove httpd
剩餘檔案可能會保留在 /etc/httpd 主目錄中,因此讓我們刪除該資料夾。
sudo rm -R /etc/httpd/
結論
在 CentOS Stream 系統上成功設定 Apache HTTP Server 和 Let's Encrypt 後,您的網站將變得強大且安全。定期更新 Apache 並續訂 Let's Encrypt SSL 憑證將有助於維持最佳的安全性和效能。享受 Apache HTTP Server 和 Let's Encrypt 為您的 Web 託管環境帶來的可靠性和安全性。