电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

PHP內(nèi)核探索 —— Apache模塊介紹

瀏覽:8日期:2022-09-16 11:38:06
Apache概述

Apache是目前世界上使用最為廣泛的一種Web Server,它以跨平臺(tái)、高效和穩(wěn)定而聞名。按照去年官方統(tǒng)計(jì)的數(shù)據(jù),Apache服務(wù)器的裝機(jī)量占該市場(chǎng)60%以上的份額。尤其是在X(Unix/Linux)平臺(tái)上,Apache是最常見的選擇。其它的Web Server產(chǎn)品,比如IIS,只能運(yùn)行在Windows平臺(tái)上,是基于微軟.Net架構(gòu)技術(shù)的不二選擇。

Apache支持許多特性,大部分通過模塊擴(kuò)展實(shí)現(xiàn)。常見的模塊包括mod_auth(權(quán)限驗(yàn)證)、mod_ssl(SSL和TLS支持) mod_rewrite(URL重寫)等。一些通用的語言也支持以Apache模塊的方式與Apache集成。 如Perl,Python,Tcl,和PHP等。

Apache并不是沒有缺點(diǎn),它最為詬病的一點(diǎn)就是變得越來越重,被普遍認(rèn)為是重量級(jí)的WebServer。所以,近年來又涌現(xiàn)出了很多輕量級(jí)的替代產(chǎn)品,比如lighttpd,nginx等等,這些WebServer的優(yōu)點(diǎn)是運(yùn)行效率很高,但缺點(diǎn)也很明顯,成熟度往往要低于Apache,通常只能用于某些特定場(chǎng)合。

Apache組件邏輯圖

Apache是基于模塊化設(shè)計(jì)的,總體上看起來代碼的可讀性高于php的代碼,它的核心代碼并不多,大多數(shù)的功能都被分散到各個(gè)模塊中,各個(gè)模塊在系統(tǒng)啟動(dòng)的時(shí)候按需載入。你如果想要閱讀Apache的源代碼,建議你直接從main.c文件讀起,系統(tǒng)最主要的處理邏輯都包含在里面。

MPM(Multi -Processing Modules,多重處理模塊)是Apache的核心組件之一,Apache通過MPM來使用操作系統(tǒng)的資源,對(duì)進(jìn)程和線程池進(jìn)行管理。Apache為了能夠獲得最好的運(yùn)行性能,針對(duì)不同的平臺(tái)(Unix/Linux、Window)做了優(yōu)化,為不同的平臺(tái)提供了不同的MPM,用戶可以根據(jù)實(shí)際情況進(jìn)行選擇,其中最常使用的MPM有prefork和worker兩種。至于您的服務(wù)器正以哪種方式運(yùn)行,取決于安裝Apache過程中指定的MPM編譯參數(shù),在X系統(tǒng)上默認(rèn)的編譯參數(shù)為prefork。由于大多數(shù)的Unix都不支持真正的線程,所以采用了預(yù)派生子進(jìn)程(prefork)方式,像Windows或者Solaris這些支持線程的平臺(tái),基于多進(jìn)程多線程混合的worker模式是一種不錯(cuò)的選擇。對(duì)此感興趣的同學(xué)可以閱讀有關(guān)資料,此處不再多講。Apache中還有一個(gè)重要的組件就是APR(Apache portable Runtime Library),即Apache可移植運(yùn)行庫,它是一個(gè)對(duì)操作系統(tǒng)調(diào)用的抽象庫,用來實(shí)現(xiàn)Apache內(nèi)部組件對(duì)操作系統(tǒng)的使用,提高系統(tǒng)的可移植性。Apache對(duì)于php的解析,就是通過眾多Module中的php Module來完成的。

PHP內(nèi)核探索 —— Apache模塊介紹

PHP與Apache

當(dāng)PHP需要在Apache服務(wù)器下運(yùn)行時(shí),一般來說,它可以mod_php5模塊的形式集成, 此時(shí)mod_php5模塊的作用是接收Apache傳遞過來的PHP文件請(qǐng)求,并處理這些請(qǐng)求, 然后將處理后的結(jié)果返回給Apache。如果我們?cè)贏pache啟動(dòng)前在其配置文件中配置好了PHP模塊(mod_php5), PHP模塊通過注冊(cè)apache2的ap_hook_post_config掛鉤,在Apache啟動(dòng)的時(shí)候啟動(dòng)此模塊以接受PHP文件的請(qǐng)求。

除了這種啟動(dòng)時(shí)的加載方式,Apache的模塊可以在運(yùn)行的時(shí)候動(dòng)態(tài)裝載, 這意味著對(duì)服務(wù)器可以進(jìn)行功能擴(kuò)展而不需要重新對(duì)源代碼進(jìn)行編譯,甚至根本不需要停止服務(wù)器。 我們所需要做的僅僅是給服務(wù)器發(fā)送信號(hào)HUP或者AP_SIG_GRACEFUL通知服務(wù)器重新載入模塊。 但是在動(dòng)態(tài)加載之前,我們需要將模塊編譯成為動(dòng)態(tài)鏈接庫。此時(shí)的動(dòng)態(tài)加載就是加載動(dòng)態(tài)鏈接庫。 Apache中對(duì)動(dòng)態(tài)鏈接庫的處理是通過模塊mod_so來完成的,因此mod_so模塊不能被動(dòng)態(tài)加載, 它只能被靜態(tài)編譯進(jìn)Apache的核心。這意味著它是隨著Apache一起啟動(dòng)的。

Apache是如何加載模塊的呢?我們以前面提到的mod_php5模塊為例。 首先我們需要在Apache的配置文件httpd.conf中添加一行:

LoadModule php5_module modules/mod_php5.so

這里我們使用了LoadModule命令,該命令的第一個(gè)參數(shù)是模塊的名稱,名稱可以在模塊實(shí)現(xiàn)的源碼中找到。 第二個(gè)選項(xiàng)是該模塊所處的路徑。如果需要在服務(wù)器運(yùn)行時(shí)加載模塊, 可以通過發(fā)送信號(hào)HUP或者AP_SIG_GRACEFUL給服務(wù)器,一旦接受到該信號(hào),Apache將重新裝載模塊, 而不需要重新啟動(dòng)服務(wù)器。

在配置文件中添加了所上所示的指令后,Apache在加載模塊時(shí)會(huì)根據(jù)模塊名查找模塊并加載, 對(duì)于每一個(gè)模塊,Apache必須保證其文件名是以“mod_”開始的,如PHP的mod_php5.c。 如果命名格式不對(duì),Apache將認(rèn)為此模塊不合法。Apache的每一個(gè)模塊都是以module結(jié)構(gòu)體的形式存在, module結(jié)構(gòu)的name屬性在最后是通過宏STANDARD20_MODULE_STUFF以__FILE__體現(xiàn)。 關(guān)于這點(diǎn)可以在后面介紹mod_php5模塊時(shí)有看到。這也就決定了我們的文件名和模塊名是相同的。 通過之前指令中指定的路徑找到相關(guān)的動(dòng)態(tài)鏈接庫文件后,Apache通過內(nèi)部的函數(shù)獲取動(dòng)態(tài)鏈接庫中的內(nèi)容, 并將模塊的內(nèi)容加載到內(nèi)存中的指定變量中。

在真正激活模塊之前,Apache會(huì)檢查所加載的模塊是否為真正的Apache模塊, 這個(gè)檢測(cè)是通過檢查module結(jié)構(gòu)體中的magic字段實(shí)現(xiàn)的。 而magic字段是通過宏STANDARD20_MODULE_STUFF體現(xiàn),在這個(gè)宏中magic的值為MODULE_MAGIC_COOKIE, MODULE_MAGIC_COOKIE定義如下:

#define MODULE_MAGIC_COOKIE 0x41503232UL /* 'AP22' */

最后Apache會(huì)調(diào)用相關(guān)函數(shù)(ap_add_loaded_module)將模塊激活, 此處的激活就是將模塊放入相應(yīng)的鏈表中(ap_top_modules鏈表: ap_top_modules鏈表用來保存Apache中所有的被激活的模塊,包括默認(rèn)的激活模塊和激活的第三方模塊。)

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 上海logo设计| 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | crm客户关系管理系统,销售管理系统,crm系统,在线crm,移动crm系统 - 爱客crm | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 北京成考网-北京成人高考网 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 户外-组合-幼儿园-不锈钢-儿童-滑滑梯-床-玩具-淘气堡-厂家-价格 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 江苏农村商业银行招聘网_2024江苏农商行考试指南_江苏农商行校园招聘 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 网站建设-网站制作-网站设计-网站开发定制公司-网站SEO优化推广-咏熠软件 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 收录网| 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | BHK汞灯-百科|上海熙浩实业有限公司 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 |