天天看點

在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題

如果你将ubuntu從12.04更新跨越到了14.04,那麼這其中包括了一個重大的更新--apache從2.2版本更新到2.4版本。apache的這次更新帶來了許多性能提升,但是如果繼續使用2.2的配置檔案會導緻很多錯誤。

在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題

<a target="_blank"></a>

從apache 2.4起所啟用授權機制比起2.2的隻是針對單一資料存儲的單一檢查更加靈活。過去很難确定哪個 order 授權怎樣被使用的,但是授權容器指令的引入解決了這些問題,現在,配置可以控制什麼時候授權方法被調用,什麼條件決定何時授權通路。

這就是為什麼大多數的更新失敗是由于配置錯誤的原因。2.2的通路控制是基于ip位址、主機名和其他角色,通過使用指令order,來設定allow, deny或 satisfy;但是2.4,這些一切都通過新的授權方式進行檢查。

為了弄清楚這些,可以來看一些虛拟主機的例子,這些可以在/etc/apache2/sites-enabled/default 或者 /etc/apache2/sites-enabled/你的網站名稱 中找到:

舊的2.2虛拟主機配置:

order allow,deny

allow from all

新的2.4虛拟主機配置:

require all granted

在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題在 Ubuntu 14.04 中Apache從2.2遷移到2.4的問題

apache 2.4 config

(lctt 譯注:order、allow 和 deny 這些将在之後的版本廢棄,請盡量避免使用,require 指令已可以提供比其更強大和靈活的功能。)

更新後如果一些設定不工作,或者你得到重定向錯誤,請檢查是否這些設定是放在.htaccess檔案中。如果apache 2.4沒有使用 .htaccess 檔案中的設定,那是因為在2.4中allowoverride指令的預設是 none,是以忽略了.htaccess檔案。你隻需要做的就是修改或者添加allowoverride all指令到你的網站配置檔案中。

上面截圖中,可以看見allowoverride all指令。

根據我的經驗,這次更新帶來的另一個問題就是在2.4中,一些舊子產品和配置檔案不再需要或者不被支援了。你将會收到一條“apache不能包含相應的檔案”的明确警告,你需要做的是在配置檔案中移除這些導緻問題的配置行。之後你可以搜尋和安裝相似的子產品來替代。

這裡還有一些其他的改變需要考慮,雖然這些通常隻會發生警告,而不是錯誤。

maxclients重命名為maxrequestworkers,使之有更準确的描述。而異步mpm,如event,用戶端最大連接配接數不等于工作線程數。舊的配置名依然支援。

defaulttype指令無效,使用它已經沒有任何效果了。如果使用除了 none 之外的其它配置值,你會得到一個警告。需要使用其他配置設定來替代它。

enablesendfile預設關閉

fileetag 現在預設為"mtime size"(沒有inode)

keepalive 隻接受“on”或“off”值。之前的任何不是“off”或者“0”的值都被認為是“on”

單一的 mutex 已經替代了 directives acceptmutex, lockfile, rewritelock, sslmutex, sslstaplingmutex 和 watchdogmutexpath 等指令。你需要做的是估計一下這些被替代的指令在2.2中的使用情況,來決定是否删除或者使用mutex來替代。

原文釋出時間:2015-02-04

本文來自雲栖合作夥伴“linux中國”

繼續閱讀