自動轉信機制 aliases 雖然好用,但是必須具有管理員身分,才有機會去設定它,一般使用者如果想要讓系統幫忙轉信,唯有使用 .forward 機制了,所謂 .forward 機制就是當 MDA 進行分信時,會讀取使用者家目錄下的 .forward 檔,並像 aliases 中定義的 include 一樣,逐一將信件轉寄出去。這個檔案的用法與 include 相同,請自行參考前一小節的說明。 查看待寄郵件佇列 新版 sendmail 在啟動時,會執行兩支 Deamon,新增的 Deamon 叫做 sm-client,它是專門用來處理待寄信件的(Queue),如果這支程式沒有被正常執行,將會導致要寄出的信件堆積在佇列裡無法遞送的情形,然而卻不會影響 sendmail 的正常運作,收信和分信是正常的。這樣的設計,可以避免因為伺服器被利用作為廣告信轉信站台,而導致整個 sendmail 當掉,對郵件主機的管理人員來說,可說是個天大的好消息。 當信件無法寄出時,應先使用 ps 指令檢查 sm-client 是否正常運作,如果 sm-client 被關閉了,就有可能是被大量轉信了,這是我們可以使用 mailq 指令來查看待寄信件清單,範例如下: # mailq /var/spool/mqueue (1 request) -----Q-ID------------- --Size-- -----Q-Time----- ------------Sender/Recipient----------- h27HOmkF013807 1725 Sat Mar 8 01:24 <spps@mail.spps.tp.edu.tw> (Deferred: Connection timed out with mfa.vip.mail.tpe.yahoo.com) <kkkwwwff@kimo.com> Total requests: 1 如果發現有大批信件賭塞,而且全都來自同一個寄信人,我們就可以斷定該寄信人是 spammer,當然二話不說,立刻將他加入到 access 中並 REJECT 起來(不要忘記雜湊成 access.db),接著切換到 /var/spool/mqueue 目錄中,將堆積的信件刪除,如果不想費心一封一封核對,直接 rm -rf * 也可以,做完這些動作後再重新啟動 sendmail 讓它上線服務。 陸、網頁伺服器HTTP 1.1 通訊協定 當歐洲高等物理實驗室開發出網頁伺服器時,當時是使用 HTTP 1.0 版通訊協定,市場上支援得最好的瀏覽器大概就是 Netscape Navigator及Communicator,Netscape 公司在產品成熟後緊接著推出 Gold 版開始收費販賣,在 Gold 版中他們提出了線上編輯網頁的概念(編好後要用 FTP 上傳就是了),為了實現這個概念必須要發展新的 HTTP 通訊協定,當然沒多久 Netscape 從市場消失,大家開始改用微軟公司的 IE 以及 FrontPage,微軟公司基於簡單易用的考量, 積極參與新版本 HTTP 通訊協定的制定,這就是後來我們看到的 HTTP 1.1。 HTTP 1.1 版通訊協定的改版幅度相當大,例如:增加檔案 zip 壓縮功能,增加 MD5 編密傳送功能......等等,其中對微軟公司最重要的就是,他們提案的 PUT 和 DELETE 指令被接受了,PUT 指令用來新增網頁、修改網頁內容或變更檔名,DELETE 指令則用來刪除網頁或目錄,透過這個機制就可以很容易用 HTTP 80 埠來直接更新網站內容,這就是微軟產品 FrontPage Server Extension 的目標,目前除了 FrontPage 支援 PUT、DELETE 指令外,還有 W3C 開發的 Winie 也可以用來上傳網頁(支援 Linux 平台,Server 端則由 Apache mod_put 負責)。底下簡要的說明 HTTP 1.1 版各個指令的用途: | 指令 | 用途 | | OPTIONS | 查詢或設定 URI 旗號,透過這個機制伺服器得以和瀏覽器協商傳輸資料時要不要壓縮、要不要 Cache ......等等 | | GET | 取得網頁資料。必須使用絕對網址來要求資料,如果使用相對路徑,則必須以 Host: 標頭標示目的網址,這跟 1.0 版有很大的不同 | | HEAD | 跟 GET 很像,但只會取得網頁標頭,不包含網頁內文(除錯用) | | POST | 取得網頁資料前,先上傳前一個網頁的表單資料,POST 和 GET 的差別在於上傳資料的方式不同,使用 GET 可以在網址後方添加資訊(?user=xxps&test=on......),但資訊的量無法超過一行的限制,使用 POST 上傳沒有上限。POST 除了用來上傳表單資料(上傳檔案)外,還可以: - 為 Server 上的資料來源建立註解
- 提供資料給表單中的動態資料連結項目(DataField)
- 新增資料到資料庫(通常是另一個網頁或純文字資料庫)
在 FrontPage 上可以製作這種進階表單,在此不作詳細說明 | | PUT | 當 PUT 指定的網頁不存在時,會自動新增網頁,否則就是要取代舊網頁或變更名稱 | | DELETE | 刪除指定的網頁或空目錄 | | TRACE | 用來做應用層的 loopback 追蹤,可以配合 OPTIONS 指定 Max-Forwards 來決定追蹤的深度,使用此指令將追蹤出所經過的 Proxy(除錯用) | | CONNECT | 是給 Proxy 伺服器用來建立 SSL 通道的,當瀏覽器透過 Proxy 使用 HTTPS 連上網頁時,需要在 Proxy 上建立 SSL 通道才能提供服務給 Client 端 |
了解 HTTP 回應狀態碼的涵義(RFC 2068),對於理解 Apache 伺服器的行為和運作機制有很大的幫助,同時當網頁出現狀況無法正常顯示時,瀏覽器也會秀出這些錯誤訊息,了解這些錯誤訊息您就可以判斷出問題的成因,因此在附錄 C 特地收錄了一般常見的各種狀態碼的表列,當作補充教材請學員細心閱讀。 新版 Apache 的特色 RedHat 8.0 版隨附的 Apache 伺服器是 2.0 版,相較於過去推出的 1.3 版有非常大幅度的改變,2.0 版的 Apache 不但支援多重處理器系統、支援 ipv6,也重新改寫了函式庫。新版 Apache 內的模組全部使用新的函式庫來編譯,使得所有模組都能支援 DSO 動態載入。(DSO 不算是新東西,過去一直不是 Apache 預設的做法,在前版 Apache 上想要使用 DSO 必須自己重新編譯 Apache)。除此之外,新版 Apache 也支援一種稱為過濾器(Filter)的全新模組,過去使用的舊模組則被稱為掌舵者(Handler)模組。 說到 filter 我想經常使用 Linux 指令的人一定不陌生,當一次使用多個 shell 指令時,我們會使用管道符號來串接指令,而在 Linux 上管道符號就被稱為 filter 符號,這意味著,這些模組可以像 shell 指令一樣串接在一起,例如:ls | grep a | less,透過多個程式接力運作最後可以得出比較複雜有彈性的結果。過去使用的 Handler 模組,在處理完程式網頁的內容後,會直接將處理結果推送回瀏覽器端;而 Filter 模組則在處理完後,將處理結果送回給 Apache core module,以便交給其它 Filter 模組進行後續處理。事實上這個新的轉變在 Microsoft IIS 上已經行之多年,它能帶來最大的好處,就是網頁伺服器將有能力去處理混用多種 script 語言所設計出來的複雜網頁,這在過去被認為用途不大,但隨著 Web Computing 的風行,這已經成為不得不然的趨勢,事實上 Apache 這樣的轉變,將有助於吸納原來 IIS 及 JAVA 伺服器的使用者,因為使用 ASP 或 JSP 的網頁在 Apache 上剖析執行已經不再只是夢想。 除了這些重大的改變以外,2.0 版在組態設定上有一些改變,這個改變是好是壞就見仁見智了,筆者認為預設的組態對於中文世界的使用者特別是中小學來說是相當不友善的,必須要經過蠻多修改才能使用,與過去 1.3 版相比改變還真大!底下就來說明組態檔中新舊版本不同的地方: conf.d 新版的 Apache 將各種模組會用到的組態檔集中擺放在 /etc/httpd/conf.d 資料中,例如:mod_perl、mod_ssl、mod_php......等,因此在組態檔中有這一行: Include conf.d/*.conf 如果您的 Apache 是從舊版升級上來的,記得把這一行加到原來的組態檔中。 IP 與埠號繫結 舊版 Apache 是使用 BindAddress 和 Port 來指定伺服器提供服務的位置,新版的 Apache 則是使用 Listen 來宣告要傾聽的埠號,使用 ServerName 指定埠號的方式來宣告是由哪個 DN 來提供該服務,好處是一台 Web 將可以同時服務多個 Port,甚至可以利用埠號的不同來設計虛擬站台(過去有所謂 IP base、name base 虛擬站台,現在又多了 Port base,有關虛擬站台在後面章節說明),例如: | 1.3 版 | 2.0 版 | BindAddress 192.168. 1.2 Port 12000 ServerName wam.spps.tp.edu.tw | Listen 12000 ServerName wam.spps.tp.edu.tw:12000 |
Multi-Processing Modules(MPMs) MPMs 是一群特殊的模組,和其它模組不同它們是無法動態載入的(DSO), 它們必須在安裝 Apache 時就決定要用哪一個,目前 MPMs 有三種 ,分別是:prefork、worker 和 perchild。像過去 1.3 版那樣在 Apache 啟動時,即預先將要提供服務的 StartServers 一併 fork 好,這種做法就稱為 prefork,其它兩種作業模式 RedHat 8.0 尚未提供,必須等新的 rpm 出來後才能安裝使用。 三個模組分別採用不同的記憶體管理方式,其中 perchild 使用執行緒來提供服務,prefork 使用子程序來提供服務,而 worker 則兼用兩種方法,它們的差異在於:執行緒可共用記憶體,並使用記憶體與其它執行緒溝通;子程序則獨立使用記憶體,且利用檔案與其它子程序溝通。前者效能較高,後者比較安全穩定。 三個模組被設計用來應付不同的效能需求,小型實驗網站使用 perchild,它會同時啟動 5 個 Server,每個 Server 最多執行 10 個執行緒,因此可同時應付 50 條連線,假設有開啟 KeepAlive 功能,則最多可同時服務 5000 個要求,相當於 IIS 中的 1000 人以下存取量(在 IIS 中也可以進行效能調整,兩者相互對照比較容易理解 MPMs 機制),預設的 prefork 是提供給中量級網站使用,最多可同時接受 3000 條連線,服務 30000 個要求,重量級網站則使用 worker,最多可同時接受 22500 條連線,約可服務 20 萬個要求。 直接受此改變影響的包含:StartServers、MinSpraeServers、MaxSpareServers、MaxClients、MaxRequestsPerChild、NumServers、StartThreads、MinSpareThreads、MaxSpareThreads、MaxThreadsPerChild....等 ,預設值如下: ## ## Server-Pool Size Regulation (MPM specific) ##
# prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves # NumServers: constant number of server processes # StartThreads: initial number of worker threads in each server process # ThreadsPerChild: constant number of worker threads in each server process # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # MaxThreadsPerChild: maximum number of worker threads in each server process <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 MaxClients 150 MaxRequestsPerChild 1000 </IfModule>
# worker MPM <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
# perchild MPM <IfModule perchild.c> NumServers 5 StartThreads 5 MinSpareThreads 5 MaxSpareThreads 10 MaxThreadsPerChild 20 MaxRequestsPerChild 0 </IfModule> |
Dynamic Shared Object(DSO) 新版 Apache 已經全面採用 DSO,過去 DSO 是編譯 Apache 的選項之一,由於一直未被各版本 Linux 支援,因此如果想要使用必須自行下載原始檔編譯,Apache 模組全面改寫應該與全面採用 DSO 有很密切的關連。如前所述,由於 Apache 模組改以過濾器的方式運作,因此有許多模組被合併、分割、移除或改名,模組之間串接的順序也變得更為重要,因此 Apache 允許模組可以指定自己的順序,過去於組態檔中提供的 AddModule 和 ClearModuleList 已經被取消不再使用,LoadModule 指令的順序也被忽略。安裝 mod_perl、mod_ssl、mod_php......等 RPM,也不用再去新增 LoadModule 設定,因為它們會自動被載入。另外,過去用來偵測哪些模組被載入的 HAVE_XXX 巨集命令,也不再使用了,因為現在的模組是動態載入的。 個人網頁目錄 中小學架設 Apache 主要是為了提供師生個人網頁空間,可惜新版 Apache 預設將此功能關閉,必須手動自行修改才能啟用: UserDir disable 改為 UserDir public_html(或其它想使用的名稱) 預設語言與字元集 新版 Apache 裝好後預設會使用荷蘭語系和西歐字元集,這樣就造成網頁看到亂碼,過去舊版本使用哪種語系是由瀏覽器來決定,新版改為由 Apache 和瀏覽器來協商,因此就算設計網頁時有指定 Big-5 字元集,但瀏覽器卻接受 Apache 的指派,而不再理會網頁內容本身的設定,這對我們會造成很大的困擾,因此安裝完 Apache,一定要記得改底下這些選項: DefaultLanguage tw ............................(中間省略)........................ LanguagePriority tw en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv ............................(中間省略)........................ AddDefaultCharset Big5 如果這些都改好後仍然出現亂碼,請檢查 IE 網際網路選項中的進階設定,是否有開啟 UTF-8 功能,目前發現某些情形下使用該功能會導致網頁亂碼,將它移除後就正常了。 
|