<-
Apache > HTTP Server > 文件 > 2.4 版

2.4 更新自 2.2

可用語言:  en  |  fr 

為了協助大家升級,我們持續編寫一份文件,說明對現有的 Apache HTTP Server 使用者至關重要的資訊。以下是要略,您可以在 新功能 文件或 src/CHANGES 檔案中找到更多資訊。應用程式和模組開發人員可以在 API 更新 概要中找到 API 變更摘要。

此文件說明伺服器行為的變更,您可能需要變更組態或使用伺服器的方式,才能持續使用 2.4,就像您現在使用 2.2 一樣。如要進一步利用 2.4 的新功能,請參閱新功能文件的說明。

本文件僅說明 2.2 到 2.4 的變更內容。如果您是從 2.0 版升級,則您也應該諮詢 2.0 到 2.2 升級文件。

Support Apache!

另請參閱

top

編譯時間組態變更

編譯程序與 2.2 版中使用的程序非常類似。大部分的情況下,您可以在安裝的伺服器目錄中的 build/config.nice 找到舊的 configure 指令列(也就是修改指令列的前一個指令)。預設設定有部分變更,以下是一些變更的詳細資料

top

執行時期組態變更

授權組態已經做過大幅修改,且其他次要組態也做過修改,這表示您可能需要在將 2.2 組態檔案用於 2.4 之前先做修改。

授權

任何使用授權的組態檔案可能都需要進行修改。

您應檢閱 身分驗證、授權和進入控制操作手冊,尤其是超越單純授權這一章節,這會說明用來控制授權指令套用順序的新機制。

已移除會 контроли授權模組在不符合經過身分驗證的使用者時回應方式的指令,包括 AuthzLDAPAuthoritative、AuthzDBDAuthoritative、AuthzDBMAuthoritative、AuthzGroupFileAuthoritative、AuthzUserAuthoritative 和 AuthzOwnerAuthoritative。這些指令已被表現力更豐富的 RequireAnyRequireNoneRequireAll 取代。

如果您使用 mod_authz_dbm,您必須將組態移植到使用 Require dbm-group ... 來取代 Require group ...

進入控制

在 2.2 中,會使用指令 OrderAllowDenySatisfy來根據用戶端主機名稱、IP 位址和用戶端要求的其他特徵執行進入控制

在 2.4 中,此進入控制會使用新模組 mod_authz_host,其執行方式與其他授權檢查相同。舊的進入控制習語應以新的身分驗證機制取代,儘管為相容舊組態,已提供新的模組 mod_access_compat

混合使用舊指令和新指令

從技術層面而言,可以將 OrderAllowDeny等舊指令與 Require等新指令混合使用,但並非建議的做法。mod_access_compat 建立的目的在於支援僅包含舊指令的組態,以便簡化 2.4 升級。請檢閱以下範例,深入了解可能產生的問題。

以下是執行相同進入控制的新舊方法範例。

在本範例中,沒有身分驗證,而且所有要求都會被拒絕。

2.2 組態

Order deny,allow
Deny from all

2.4 組態

Require all denied

在本範例中,沒有身分驗證,而且所有要求都會被允許。

2.2 組態

Order allow,deny
Allow from all

2.4 組態

Require all granted

在下一個範例中,沒有身分驗證,而且 example.org 網域中的所有主機都被允許存取所有其他主機都會被拒絕存取。

2.2 組態

Order Deny,Allow
Deny from all
Allow from example.org

2.4 組態

Require host example.org

在下一個範例中,混用舊指令和新指令會導致意外的結果。

混用舊指令和新指令:無法按照預期運作

DocumentRoot "/var/www/html"

<Directory "/">
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Location "/server-status">
    SetHandler server-status
    Require local
</Location>

access.log - GET /server-status 403 127.0.0.1
error.log - AH01797: client denied by server configuration: /var/www/html/server-status

為什麼 httpd 會拒絕存取 servers-status,即使組態似乎允許存取呢?

反之,這個範例會按照預期運作

混用舊指令和新指令:可以按照預期運作

DocumentRoot "/var/www/html"

<Directory "/">
    AllowOverride None
    Require all denied
</Directory>

<Location "/server-status">
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow From 127.0.0.1
</Location>

access.log - GET /server-status 200 127.0.0.1

因此,即使混用組態仍然有可能,請在升級時盡量避免:保留舊指令,然後在稍後階段再移轉至新指令,或是直接全部移轉。

在許多有身分驗證的組態中,其中 Satisfy 的值是預設的 ALL,僅僅停用基於主機的存取控制的區塊會被省略

2.2 組態

# 2.2 config that disables host-based access control and uses only authentication
Order Deny,Allow
Allow from all
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 組態

# No replacement of disabling host-based access control needed
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

在身分驗證和存取控制都有意義地結合的組態中,應該移轉存取控制指令。這個範例允許符合 兩個 條件的要求

2.2 組態

Order allow,deny
Deny from all
# Satisfy ALL is the default
Satisfy ALL
Allow from 127.0.0.1
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 組態

AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
<RequireAll>
  Require valid-user
  Require ip 127.0.0.1
</RequireAll>

在身分驗證和存取控制都有意義地結合的組態中,應該移轉存取控制指令。這個範例允許符合 任一 條件的要求

2.2 組態

Order allow,deny
Deny from all
Satisfy any
Allow from 127.0.0.1
AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
Require valid-user

2.4 組態

AuthType Basic
AuthBasicProvider file
AuthUserFile /example.com/conf/users.passwd
AuthName secure
# Implicitly <RequireAny>
Require valid-user
Require ip 127.0.0.1

其他組態變更

如下所述,某些組態可能需要一些其他小的調整。

top

其他變更

top

第三方模組

在載入之前,所有模組皆需為 2.4 重新編譯。

為 2.2 版本所設計的許多第三方模組,否則將在 Apache HTTP Server 2.4 中運作而無改變。某些模組需要變更;請參閱 API 更新 總覽。

top

升級時常見的問題

可用語言:  en  |  fr 

top

意見

公告
這不是問與答區段。放於此處的留言應針對改善文件或伺服器的建議,而且可能由我們的管理員移除,無論其是否已實作或被視為無效/離題。有關如何管理 Apache HTTP Server 的問題應轉交至我們在 Libera.chat 上的 IRC 頻道,#httpd,或傳送至我們的 郵寄清單