當網站需要作系統升級、程式除錯等維護作業時,身為一個負責任的網站經營者或管理者,不可恣意將網站中斷連線,因為這樣不僅對那些忠實的會員不尊重,而且還可能會流失那些恰巧路過的新訪客,然而,管理者又必須將網站服務先停止才能進行系統維護作業,所以折衷的作法是,在系統維護期間,當用戶連結至網站的任何一個頁面時,系統都會自動導向至一個宣告 "系統維護" 的網頁,並且在系統維護期間,不會讓用戶的電腦出現 "網頁中斷連線" 的錯誤訊息。
以下教學是本站實際使用的案例,此法也適用於其他用 Apache 架設的不同類型網站:
一、新增一個 "系統維護" 的宣告網頁,並且放在與主網站不同的目錄層,就此例而言,
主網站的根目錄 = /var/www/dekiwiki
維護宣告頁的根目錄 = /var/www/html
為何要分開兩個目錄呢?因為在進行維護作業時,需要變動主網站目錄內的內容,分開不同的目錄可使宣告網頁保持正常。
#>vi /var/www/html/maintenance.html
reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)Callstack:
at 實驗專案/企業導入Open_Sources實務/以Deki_Wiki導入企業入口網站架構/Deki_Wiki/Maintain/網站維護模式設定
MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException: reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown.
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Visit (MindTouch.Deki.Script.Expr.DekiScriptVar expr, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Expr.DekiScriptVar.VisitWith[DekiScriptExpressionEvaluationState,Range] (IDekiScriptExpressionVisitor`2 visitor, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Evaluate (MindTouch.Deki.Script.Expr.DekiScriptAccess expr, DekiScriptExpressionEvaluationState state, Boolean evaluateProperties) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Visit (MindTouch.Deki.Script.Expr.DekiScriptAccess expr, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Expr.DekiScriptAccess.VisitWith[DekiScriptExpressionEvaluationState,Range] (IDekiScriptExpressionVisitor`2 visitor, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Visit (MindTouch.Deki.Script.Expr.DekiScriptCall expr, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Expr.DekiScriptCall.VisitWith[DekiScriptExpressionEvaluationState,Range] (IDekiScriptExpressionVisitor`2 visitor, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Visit (MindTouch.Deki.Script.Expr.DekiScriptSequence expr, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Expr.DekiScriptSequence.VisitWith[DekiScriptExpressionEvaluationState,Range] (IDekiScriptExpressionVisitor`2 visitor, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
at MindTouch.Deki.Script.Compiler.DekiScriptExpressionEvaluation.Visit (MindTouch.Deki.Script.Expr.DekiScriptReturnScope expr, DekiScriptExpressionEvaluationState state) [0x00000] in <filename unknown>:0
此網頁的內容可自行修改。
二、新增一個網站設定檔,用來導向所有連結至維護宣告頁。
#> vi /etc/httpd/conf.d/deki-apache.maintenance.conf
<VirtualHost *>
ServerName deki.localdomain
ServerAlias deki
DocumentRoot "/var/www/html"
DirectoryIndex maintenance.html
ErrorDocument 404 /
</VirtualHost>
紅字的部份是主要的設定。
三、切換網站至維護模式
// 使主網站的設定檔(deki-apache.conf)停用
#> cd /etc/httpd/conf.d
#> mv deki-apache.conf deki-apache.conf.disabled
// 重新載入設定,這裡使用重新載入指令,網站不會出現短暫中斷連線的狀況。
#> service httpd reload
在維護工作完成後,要切換為主網站時,只要在步驟三的兩個設定檔分別更名後,執行重新載入指令,這樣主網站服務就立即恢復了。
完成。
系統維護宣告頁