介紹
Apache 是互聯網上最流行的網絡伺服器之一。它用於提供超過一半的所有活躍網站的服務。儘管有許多可行的網絡伺服器可以提供您的內容,但了解 Apache 的工作原理是有幫助的,因為它無處不在。
本文將檢視一些通用的配置文件以及其中可以控制的選項。本文將遵循 Ubuntu/Debian 的 Apache 文件佈局,這與其他發行版構建的配置層次結構不同。
先決條件
如果您使用的是 Ubuntu 16.04 版本或更低版本,我們建議您升級到更新版本,因為 Ubuntu 不再支持這些版本。這個指南集合將幫助您升級 Ubuntu 版本。
-
運行 Ubuntu 的伺服器,以及一個帶有
sudo
權限的非根用戶和一個活動的防火牆。有關如何設置這些的指南,請從此列表中選擇您的發行版並遵循我們的初始伺服器設置指南。 -
在您開始探索Apache配置之前,您應該在您的伺服器上安裝Apache。您可以通過遵循我們的“在Ubuntu上安裝Apache Web伺服器”教程學習,教程分別針對版本為22.04 / 20.04 / 18.04,或者遵循“在Debian 10上安裝Apache Web伺服器”教程。
在Ubuntu上配置Apache Web服务器的5个步骤
步骤1:Apache文件层次结构
Apache 將其主要配置文件存放在 /etc/apache2
文件夾中。執行以下命令將列出此文件夾中的所有文件:
Outputenvars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available
此目錄中包含一些純文本文件和一些子目錄。以下是一些有用的位置:
apache2.conf
: 這是伺服器的主配置文件。幾乎所有配置都可以從此文件中完成,儘管建議使用單獨的指定文件以簡化操作。此文件將配置默認值並成為伺服器讀取配置詳細信息的中心訪問點。ports.conf
: 此文件用於指定虛擬主機應該監聽的端口。如果您正在配置 SSL,請務必檢查此文件是否正確。sites-available/
和sites-enabled/
:sites-available
目錄包含虛擬主機文件配置。此文件夾中的配置將確定為哪些請求提供服務。通過鏈接到sites-enabled
目錄啟用,該目錄存儲已啟動的虛擬主機配置文件。當 Apache 啟動或重新加載時,它將讀取配置文件並鏈接到sites-enabled
目錄中,以編譯完整的配置。conf-available/
和conf-enabled/
: 這些目錄包含未附加到虛擬主機配置文件的配置片段。mods-enabled/
和mods-available/
:這些目錄定義了可以選擇性加載的模塊。這些目錄包含兩個部分:以.load
結尾的文件包含加載特定模塊的片段,以及以.conf
結尾的文件,其中存儲這些模塊的配置。
Apache 配置不是在單個巨大的文件中進行的,而是通過模塊化設計進行的,可以根據需要添加和修改新文件。
步驟 2:探索 Apache2.conf 文件
您的 Apache 服務器的主要配置細節存儲在 /etc/apache2/apache2.conf
文件中。
此文件分為三個主要部分:
- 用於全局 Apache 服務器進程的配置
- 用於默認服務器的配置
- 用於虛擬主機的配置。
使用您首選的文本編輯器打開此文件。以下示例使用 nano
:
在 Ubuntu 和 Debian 中,此文件用於配置全局定義。默認服務器和虛擬主機的配置是通過使用 Include
指令處理的。
Include
指令允許 Apache 在當前文件的位置讀取其他配置文件。結果是 Apache 在啟動時動態生成一個全面的配置文件。
在這個檔案中,有許多不同的Include
和IncludeOptional
語句。這些指令載入模組定義,ports.conf
文件,conf-enabled/
目錄中的特定配置文件,以及sites-enabled/
目錄中的虛擬主機定義:
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf
步驟3:設置Apache全局配置
在全局配置中有一些您可能想要修改的選項:
超時
默認情況下,此參數設置為300
。這意味著服務器最多有300秒的時間來完成每個請求。這個參數可以安全地降低到30
到60
秒之間。
保持連線
這個選項,如果設置為開啟
,將允許每個連接保持打開狀態,以處理來自同一客戶端的多個請求。
如果設置為關閉
,則每個請求都必須建立新的連接,這可能會導致根據您的設置和流量情況產生重大的開銷。
MaxKeepAliveRequests
這控制每個連接在死亡之前處理多少個單獨的請求。將此數字保持較高將使Apache更有效地為每個客戶端提供內容。
默認設置為100
。將此值設置為0
將允許Apache為每個連接提供無限量的請求。
KeepAliveTimeout
此設置指定在完成上一個請求後等待下一個請求的時間。如果達到超時閾值,則連接將中止。
這意味著下次請求內容時,服務器將建立新的連接以處理組成客戶端正在訪問的頁面的內容的請求。默認設置為5
。
在檢查完這個配置文件的內容後,您可以通過按下CTRL+X
來關閉它。
多進程模組
A Multi-Processing Module (MPM) extends Apache’s modular design. MPMs are responsible for listening, directing, and handling different network requests. You can cross-reference which section your Apache installation was compiled in with using the following command:
OutputCompiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
您可以使用 a2query -M
命令檢查您的伺服器上的 MPM 類型:
Outputevent
輸出顯示此伺服器使用了 event
MPM。您的安裝可能有多個可供選擇,但只能選擇一個。
步驟 4:更新 Apache 虛擬主機文件
預設虛擬主機宣告可在名為 000-default.conf
的文件中找到,位於 sites-available/
目錄中。您可以通過檢查此文件了解虛擬主機文件的一般格式。
使用以下命令打開文件:
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…
預設虛擬主機配置為處理位於端口 80
的任何請求,即標準的 HTTP 端口。這是在宣告標頭中定義的,其中寫著 *:80
,意味著任何界面上的端口 80
。
但是,這並不意味著它一定會處理此端口上的每個伺服器請求。Apache 使用與請求匹配的最具體的虛擬主機定義。如果有更具體的定義,它可能會覆蓋此定義。檢查完文件後,您可以按 CTRL+X
關閉它。
Apache虛擬主機配置
以下選項在虛擬主機定義中設置,在任何其他較低級別的子聲明之外。它們應用於整個虛擬主機。
首先,打開conf-available/
目錄中的security.conf
文件:
此文件包含Server Signature
指令,允許您指定在服務器出現問題時應使用的聯繫電子郵件。您可以將默認選項從On
更改為EMail
以顯示服務器管理員電子郵件地址。如果您調整了此設置,請確保您願意接收郵件:
…
ServerSignature EMail
…
通過按CTRL+X
退出文件。編輯配置文件後,將提示您確認更改。按Y
保存更改到您的文件,或按N
放棄更改。
在您的虛擬主機文件中,您可以添加一個ServerName
指令,該指令指定此請求應該處理的域名或IP地址。這是能夠添加特定性到虛擬主機的選項,如果匹配ServerName
值,則允許它覆蓋默認定義。
運行以下命令打開您的虛擬主機文件,確保替換your_domain
變量為您的實際域名:
將your_domain
附加到ServerName
指令:
…
ServerName your_domain
…
同樣地,您也可以使用ServerAlias
指令使虛擬主機適用於多個名稱。這提供了到達相同內容的替代途徑。這的一個好用例是添加相同的域名,以www
為前綴:
…
ServerAlias www.your_domain.com
…
DocumentRoot
指令指定了請求此虛擬主機的內容將位於何處。在Ubuntu上,默認虛擬主機設置為從/var/www/
目錄提供內容:
…
DocumentRoot /var/www/your_domain/public_html
…
目錄定義
在虛擬主機定義中,有關伺服器如何處理文件系統中不同目錄的定義。Apache將按照從最短到最長的順序應用所有這些方向,因此再次有機會覆蓋先前的選項。
使用此命令打開apache2.conf
文件:
…
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
…
第一個目錄定義適用於/
,或根目錄,目錄的規則。這將為您的虛擬主機提供基本配置,因為它適用於文件系統上提供的所有文件。注意此文件中包含的目錄配置選項以及一些有用的註釋。此默認配置拒絕對所有內容的訪問,除非在隨後的目錄定義中另有指定。
Require
指令可以限制或開放伺服器內不同資源的存取。
AllowOverride
指令用於決定是否允許 .htaccess
檔案覆蓋內容目錄中的設定。這預設是不允許的,但在各種情況下啟用它可能會很有用。
檢查完這個檔案的內容後,您可以按下 CTRL+X
來關閉它。
Alias 和 ScriptAlias 聲明
有時,目錄定義之前會有 Alias
或 ScriptAlias
指令。
使用此命令打開您的虛擬主機配置文件,並將 your_domain
變量替換為您的域名:
Alias
指令將 URL 路徑映射到目錄路徑。例如,在一個虛擬主機處理對 your_domain
的請求時,以下內容將允許訪問 /usr/local/apache/content/
中的內容,當導航到 your_domain.com/content/
時:
Alias “/content/” “/usr/local/apache/content/”
ScriptAlias
指令的操作方式相同,但用於定義其中包含可執行組件的目錄:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
請記得按照前一節討論的內容定義具有訪問權限的目錄。在完成對文件的編輯後,請按CTRL+X
退出文件。如果對該文件進行了任何更改,請按Y
將更改保存到您的文件中,或按N
將文件保持在配置更改之前的狀態。
步驟5:啟用站點和模組
一旦您擁有滿足要求的虛擬主機文件,您可以使用Apache附帶的工具將其轉換為實時網站。
要在sites-enabled
目錄中為現有文件在sites-available
目錄中創建符號鏈接,請發出以下命令。請確保將your_domain
替換為您自己的虛擬主機站點配置文件的名稱:
啟用站點後,請發出以下命令,告訴Apache重新加載其配置文件,從而允許更改傳播:
還有一個關於禁用虛擬主機的相應命令。它通過從sites-enabled
目錄中刪除符號鏈接來運行。例如,啟用您的虛擬主機站點後,您可以禁用默認的000-default
站點:
模塊可以通過使用 a2enmod
和 a2dismod
命令啟用或禁用。它們與相應命令的 a2ensite
和 a2dissite
版本的工作方式相同。例如,要啟用 info
模塊,您可以使用以下命令:
同樣地,您可以使用 a2dismod
命令禁用模塊:
在修改配置文件並啟用或禁用模塊後,請記得重新啟動 Apache。
結論
Apache 是多功能且非常模塊化的,因此根據您的設置,配置需求會有所不同。通過查看上面的一些常見用例,您應該對主要的配置文件用途以及它們之間的交互有很好的理解。如果您需要了解特定的配置選項,提供的文件都有很好的註釋,而且 Apache 提供了優秀的文檔。希望現在配置文件不會那麼令人生畏,您將更加自在地進行實驗和修改以滿足您的需求。