出版時間:2009年 出版社:電子工業(yè)出版社 作者:張中慶,梁雪平 頁數(shù):604 字?jǐn)?shù):850000
Tag標(biāo)簽:無
前言
如果說沒有Apache就沒有Intemet可能有些夸張,但至少可以說沒有Apache,互聯(lián)網(wǎng)就不會發(fā)展得這么快。根據(jù)互聯(lián)網(wǎng)研究公司NetCraft的統(tǒng)計,多年來Apache一直穩(wěn)居Web服務(wù)器市場的頭把交椅,至今仍占據(jù)超過50%的市場份額。就整個互聯(lián)網(wǎng)來說,Apache仍然是最重要的軟件之一。 盡管近幾年來涌現(xiàn)出不少以“高性能”為賣點的新的Web服務(wù)器軟件,比如Lighttpd、Nginx等,吸引了不少用戶注意力,不過Apache因其功能廣泛,某些方面仍具有不可替代性,仍然是Web服務(wù)器技術(shù)領(lǐng)域的風(fēng)向標(biāo)。話說回來,“重劍無鋒,大巧不工”,有的時候軟件性能表現(xiàn)不佳,更多原因可能是用戶對其了解不夠、使用不當(dāng)造成的,并非軟件自身有多大缺陷。對Apache來說,更是如此。因此,通過分析源代碼了解Apache軟件架構(gòu)體系,熟知其本質(zhì),方能更有效地使用Apache Web服務(wù)器,使之發(fā)揮出最大效能。為網(wǎng)站節(jié)省資源,為企業(yè)節(jié)省資金,也能為用戶提供更好的訪問體驗,好處多多。 此外,隨著互聯(lián)網(wǎng)業(yè)務(wù)的復(fù)雜化,很多網(wǎng)站在使用Apache的過程中也遇到了新的挑戰(zhàn),如常常要在業(yè)務(wù)的驅(qū)動下對Apache進(jìn)行擴(kuò)展性的開發(fā)(例如擴(kuò)展日志模塊以便于更復(fù)雜的日志統(tǒng)計)。這時,源代碼分析是繞不過去的一件事兒,盡管源代碼獲取是輕而易舉之事,但Apache代碼畢竟凝聚了開源軟件界的群體智慧,要想高效分析也并非易事,相信這本書能讓有此需求的讀者少走彎路,剝絲抽繭,獲得更多啟發(fā)與借鑒?! ≌f起源代碼分析,其實幾年前市面上出現(xiàn)過一些有關(guān)此類話題的圖書,但基本上是在大段源代碼加上幾句注釋了事,讀者可能會有吃到注水豬肉的感覺。而讀者對本書這一點大可放心,書中代碼只是點到即止,相對環(huán)保多了。
內(nèi)容概要
本書是“Apache源代碼全景分析”的第1卷。書中詳細(xì)介紹了Apache的基礎(chǔ)體系結(jié)構(gòu)和核心模塊的實現(xiàn)機(jī)制,包括配置文件、模塊化結(jié)構(gòu)、多任務(wù)并發(fā),以及網(wǎng)絡(luò)連接和請求讀取,其中多任務(wù)并發(fā)體系結(jié)構(gòu)是本書分析的重點,討論了Prefork、Worker及WinNT三種MPM。本書還著重介紹了Apache 2.0新引入的過濾器,包括過濾器的使用、實現(xiàn),以及其中的數(shù)據(jù)組織形式——存儲段和存儲段組,剖析了Apache中常用的過濾器?! ”緯哪康氖巧钊胪诰駻pache運行背后的實現(xiàn)機(jī)制和模塊開發(fā)的細(xì)節(jié),適合Apache模塊開發(fā)者、希望了解內(nèi)部細(xì)節(jié)的Apache管理員、Web服務(wù)器開發(fā)者、大規(guī)模服務(wù)器開發(fā)者學(xué)習(xí)和閱讀。
作者簡介
張中慶,計算機(jī)軟件與理論碩士。擁有多年服務(wù)器端軟件開發(fā)經(jīng)驗,關(guān)注大規(guī)模服務(wù)器設(shè)計技術(shù),致力于開源技術(shù)的使用、分享和推廣,《UNIX/Linux下curses庫開發(fā)指南》第一作者。
書籍目錄
第1章 Web服務(wù)器概述 1.1 WWW概述 1.1.1 Internet概述 1.1.2 超文本的概念 1.1.3 WWW的歷史 1.2 HTTP服務(wù)器 1.2.1 HTTP服務(wù)器簡介 1.2.2 HTTP服務(wù)器功能 1.2.3 WWW文檔 1.2.4 工作方式 1.3 Apache功能 1.3.1 虛擬主機(jī) 1.3.2 內(nèi)容協(xié)商 1.3.3 持續(xù)連接 1.3.4 緩存 1.3.5 訪問控制和安全 1.3.6 動態(tài)內(nèi)容生成第2章 Apache體系結(jié)構(gòu) 2.1 Apache目錄 2.2 Apache層次結(jié)構(gòu) 2.2.1 操作系統(tǒng)支持層 2.2.2 可移植運行庫層 2.2.3 核心功能層 2.2.4 可選功能層 2.2.5 第三方支持庫 2.2.6 Apache工具包 2.3 Apache核心功能層 2.3.1 核心與可選模塊的關(guān)系 2.3.2 核心組件 2.4 Apache運行流程 2.4.1 Apache啟動過程 2.4.2 HTTP連接處理 2.4.3 請求報文讀取 2.4.4 請求處理 2.4.5 內(nèi)容生成 2.4.6 關(guān)閉與重啟 2.5 主程序main 2.5.1 主程序概要 2.5.2 主程序細(xì)節(jié)第3章 配置文件管理 3.1 Apache配置系統(tǒng) 3.2 配置文件 3.2.1 配置文件類 3.2.2 配置文件處理時機(jī) 3.3 指令相關(guān)概念 3.3.1 指令概述 3.3.2 指令參數(shù) 3.3.3 指令上下文 3.3.4 指令參數(shù)類型 3.4 指令配置 3.4.1 指令結(jié)構(gòu) 3.4.2 指令定義 3.4.3 預(yù)定義指令函數(shù) 3.4.4 指令表 3.5 Apache配置處理 3.5.1 指令保存 3.5.2 指令讀取 3.5.3 配置指令處理 3.5.4 特殊指令 3.6 .htaccess處理 3.6.1 .htaccess使用場合 3.6.2 指令的覆蓋 3.6.3 處理.htaccess 3.7 實現(xiàn)自己的配置段第4章 Apache模塊化體系結(jié)構(gòu) 4.1 Apache模塊概述 4.1.1 Apache模塊組成 4.1.2 Apache核心與模塊交互 4.2 Apache模塊結(jié)構(gòu) 4.3 模塊的加載 4.3.1 模塊變量 4.3.2 DSO(Dynamic Shared Object,動態(tài)共享對象)的概念 4.3.3 靜態(tài)模塊加載 4.3.4 動態(tài)模塊加載 4.3.5 模塊卸載 4.4 指令表 4.4.1 指令表概述 4.4.2 指令處理函數(shù) 4.4.3 指令共享 4.5 掛鉤(HOOK) 4.5.1 為什么引入掛鉤 4.5.2 聲明掛鉤 4.5.3 掛鉤數(shù)組聲明(APR—HOOK—LINK) 4.5.4 掛鉤結(jié)構(gòu)(APR—HOOK—STRUCT) 4.5.5 掛鉤函數(shù)注冊(APR—IMPLEMENT—EXTERNAL—HOOK—BASE) 4.5.6 使用掛鉤 4.5.7 掛鉤排序 4.5.8 可選掛鉤 4.5.9 掛鉤縱覽 4.5.10 自己編寫掛鉤 4.6 模塊與配置文件 4.6.1 概述 4.6.2 如何描述配置信息 4.6.3 目錄相關(guān)配置(Per—Directory Config) 4.6.4 服務(wù)器配置(Per-Server Config) 4.7 配置存儲和使用 4.7.1 配置向量 4.7.2 配置存儲體系結(jié)構(gòu) 4.7.3 虛擬主機(jī)配置存儲 4.7.4 目錄配置存儲 4.7.5 Location配置存儲 4.7.6 文件配置存儲 4.7.7 總體存儲示意 4.8 模塊通信 4.8.1 簡單通信方式 4.8.2 可選函數(shù) 4.8.3 提供者API 4.9 常用模塊 4.9.1 緩存模塊 4.9.2 URL映射模塊 4.9.3 內(nèi)容生成模塊 4.9.4 安全模塊 4.9.5 代理模塊 4.9.6 其余模塊第5章 多任務(wù)并發(fā)處理 5.1 多進(jìn)程并發(fā)處理 5.1.1 概述 5.1.2 MPM在Apache中的位置 5.2 MPM數(shù)據(jù)結(jié)構(gòu) 5.2.1 記分板 5.2.2 終止管道(Pipe of Death) 5.3 Inetd:通用的多任務(wù)處理結(jié)構(gòu) 5.3.1 服務(wù)器程序概述 5.3.2 INETD 5.4 預(yù)創(chuàng)建(Prefork)MPM分析 5.4.1 Leader/Follow模式 5.4.2 Prefork MPM概述 5.4.3 Prefork MPM實現(xiàn) 5.5 工作者(Worker):MPM分析 5.5.1 Worker MPM概述 5.5.2 Worker主進(jìn)程 5.5.3 子進(jìn)程管理 5.5.4 線程管理 5.5.5 信號處理 5.6 WinNT MPM分析 5.6.1 WinNT MPM概述 5.6.2 完成端口相關(guān)概念 5.6.3 WinNT MPM主程序 5.6.4 監(jiān)控主進(jìn)程 5.6.5 工作進(jìn)程 5.6.6 線程處理第6章 網(wǎng)絡(luò)連接 6.1 網(wǎng)絡(luò)連接概述 6.1.1 網(wǎng)絡(luò)連接上下文環(huán)境 6.1.2 等待連接 6.1.3 接受連接 6.1.4 創(chuàng)建連接 6.2 連接數(shù)據(jù)結(jié)構(gòu) 6.3 等待連接 6.3.1 概述 6.3.2 套接字創(chuàng)建 6.3.3 套接字偵聽 6.4 連接處理 6.4.1 連接處理概述 6.4.2 創(chuàng)建連接 6.4.3 連接處理 6.5 請求讀取 6.5.1 請求讀取概述 6.5.2 HTTP請求報文 6.5.3 request_rec結(jié)構(gòu) 6.5.4 請求讀取實現(xiàn) 6.5.5 請求行讀取 6.5.6 請求頭讀取 6.5.7 網(wǎng)絡(luò)IO讀寫第7章 過濾器 7.1 過濾器概述 7.2 過濾器類型 7.3 過濾器結(jié)構(gòu) 7.4 過濾器協(xié)議 7.5 過濾器使用 7.5.1 靜態(tài)過濾器使用 7.5.2 動態(tài)過濾器使用 7.6 過濾器操作 7.6.1 過濾器注冊概述 7.6.2 數(shù)據(jù)結(jié)構(gòu)描述 7.6.3 過濾器結(jié)點 7.6.4 過濾器注冊 7.6.5 過濾器的查找 7.6.6 添加過濾器至指定請求或連接 7.6.7 從連接中刪除過濾器 7.6.8 過濾器初始化 7.7 智能過濾器 7.7.1 何謂智能過濾器 7.7.2 智能過濾器的使用 7.7.3 智能過濾器的實現(xiàn) 7.8 過濾器函數(shù) 7.8.1 輸出過濾器 7.8.2 輸入過濾器第8章 存儲段和存儲段組 8.1 什么是存儲段和存儲段組 8.1.1 存儲段和存儲段組 8.1.2 為什么需要存儲段組 8.2 存儲段分配子 8.2.1 概述 8.2.2 分配子創(chuàng)建 8.2.3 存儲段內(nèi)存分配 8.2.4 存儲段內(nèi)存釋放 8.3 存儲段操作概述 8.3.1 存儲段接口 8.3.2 存儲段空接口 8.4 存儲段類型 8.4.1 堆存儲段(Heap Bucket) 8.4.2 內(nèi)存池存儲段(Pool Bucket) 8.4.3 文件存儲段(File Bucket) 8.4.4 MMAP存儲段(MMAP Bucket) 8.4.5 套接字存儲段(Socket Bucket) 8.4.6 管道存儲段(Pipe Bucket) 8.4.7 持久存儲段(Immortal Bucket) 8.4.8 臨時存儲段(Transient Bucket) 8.4.9 刷新存儲段(Flush Bucket) 8.4.10 流終止(EOS)存儲段 8.4.11 HTTP錯誤存儲段 8.5 存儲段操作 8.6 存儲段組操作 8.6.1 創(chuàng)建存儲段組 8.6.2 存儲段組的銷毀 8.6.3 存儲段組的分裂 8.6.4 統(tǒng)計存儲段長度 8.6.5 存儲段轉(zhuǎn)換 8.6.6 數(shù)據(jù)寫入 8.6.7 ap_r函數(shù)寫入 8.7 存儲段組和過濾器 8.7.1 存儲段組和過濾器的關(guān)系 8.7.2 獲取存儲段組 8.7.3 存儲段組傳遞第9章 常用過濾器 9.1 概述 9.2 輸入過濾器 9.2.1 CORE_IN輸入過濾器 9.2.2 HTTP_IN過濾器 9.2.3 創(chuàng)建自己的輸入過濾器 9.3 輸出過濾器 9.3.1 資源過濾器 9.3.2 內(nèi)容過濾器 9.3.3 協(xié)議過濾器 9.3.4 編碼轉(zhuǎn)換過濾器 9.3.5 網(wǎng)絡(luò)過濾器(CORE) 9.3.6 編寫輸出過濾器索引
章節(jié)摘錄
第1章 Web服務(wù)器概述 1.3 Apache功能 1.3.1 虛擬主機(jī) 虛擬主機(jī)(Virtual Host)是指在一個機(jī)器上運行多個Web站點的機(jī)制?。ū热纾簑ww.companyl.com和www.company2.com)。虛擬主機(jī)的實現(xiàn)包括以下三種方式?! 。?)Web服務(wù)器中配備多個IP地址,并且每一個邏輯Web服務(wù)器使用一個IP地址。這種虛擬主機(jī)的實現(xiàn)技術(shù)被稱為“基于IP”,這是最簡單的虛擬主機(jī)的實現(xiàn)機(jī)制,但是這種機(jī)制存在一些問題,比如擴(kuò)展性的問題。一臺機(jī)器所能存在的物理IP地址總是有限的,因此對于一個專門的ISP而言,如果要提供大量的虛擬主機(jī),則會存在相當(dāng)大的困難。另外一個存在的問題就是IP地址的有限性,目前Web站點的數(shù)目遠(yuǎn)遠(yuǎn)超過IP地址的數(shù)目,因此,以IP地址區(qū)分虛擬主機(jī),則會使Web站點的發(fā)展受到限制?! 。?)Web服務(wù)器只有一個IP地址,不同的Web服務(wù)器使用不同的端口進(jìn)行偵聽。因此這種服務(wù)器的請求uRI中必須明確地給出端口,而不能使用默認(rèn)的Web端口80,比如http://127.0.0.1:8900。這種虛擬主機(jī)的實現(xiàn)技術(shù)可稱為“基于端口”。這種策略存在的問題是用戶必須顯式給出請求的端口,這對大部分用戶來說顯然是不太方便的。如果忘記輸入端口號或輸入一個錯誤的端口號,則會使用錯誤的虛擬主機(jī)。 ?。?)Web服務(wù)器只有一個IP地址,同時多個域名被映射到該IP地址上。所有的Web服務(wù)器偵聽同一個端口。服務(wù)器通過HTTP請求頭中的HOST域?qū)φ埱筮M(jìn)行區(qū)分。對于HTTP 1.1協(xié)議而言,該域是必須具備的,而低于HTTP 1.1的協(xié)議則未必如此。因此從這個意義上說,只有HTTP 1.1協(xié)議才可以支持這種基于“HOST域”的協(xié)議。 Apache中支持上面三個方式的虛擬主機(jī),而且通過mod_vhost_alias模塊,可以使得類似的虛擬主機(jī)配置起來非常容易,減輕了管理員的負(fù)擔(dān)。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載