徐紅梅
摘 要:Apache服務(wù)器默認(rèn)情況下只能支持傳統(tǒng)的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)CGI。但Apache可以通過(guò)和其他動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)進(jìn)行整合,實(shí)現(xiàn)更多的特性與功能。文章主要研究在Linux網(wǎng)絡(luò)操作系統(tǒng)中安裝Apache,PHP和MySQL軟件的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)整合的安裝及所遇到問(wèn)題的解決方法。
關(guān)鍵詞:動(dòng)態(tài)網(wǎng)頁(yè);Apache;LAMP
目前,在各大操作系統(tǒng)平臺(tái)上能運(yùn)行且較為流行的Web服務(wù)器非Apache服務(wù)器莫屬,再加上Apache服務(wù)器屬于開源軟件,在不斷的功能新特性的開發(fā)及完善后,已經(jīng)成為當(dāng)前主要的Web服務(wù)器端主流軟件之一。
1 Apache服務(wù)器介紹
1.1 Apache的結(jié)構(gòu)
Apache由內(nèi)核、標(biāo)準(zhǔn)模塊和第三方提供的模塊3個(gè)層次組成(見(jiàn)表1)。
表1 Apache結(jié)構(gòu)
1Apache內(nèi)核
2標(biāo)準(zhǔn)默認(rèn)安裝模塊集合 3標(biāo)準(zhǔn)默認(rèn)不安裝模塊集合
4第三方提供的模塊
由表1可以看出,Apache服務(wù)器將默認(rèn)安裝安裝圖中的內(nèi)核部分和標(biāo)準(zhǔn)模塊的默認(rèn)安裝模塊兩部分。在安裝過(guò)程中,如果用戶需要,可以根據(jù)自行需求,對(duì)安裝部分的模塊集合進(jìn)行修改和刪除等。同時(shí),也可選擇對(duì)第三方提供的模塊的安裝。因此,Apache服務(wù)器在模塊安裝過(guò)程中的可擴(kuò)展性很強(qiáng),可以滿足不同用戶的開發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的需求[1]。
1.2 Apache的運(yùn)行機(jī)制
Apache2.xApache運(yùn)行方式有3種,主要采用多處理模塊(Multi-Processing Module,MPM)方式,這種方式可以在服務(wù)器上同時(shí)處理多個(gè)請(qǐng)求操作,從而控制Apache的運(yùn)行方式。
(1)預(yù)派生(Profork)MPM。這種模式首先啟動(dòng)父進(jìn)程,父進(jìn)程監(jiān)控子進(jìn)程的終止或創(chuàng)建,父進(jìn)程創(chuàng)建并啟動(dòng)一定可配置數(shù)量的子進(jìn)程,在運(yùn)行中,由一定數(shù)量的空閑子進(jìn)程響應(yīng)客戶請(qǐng)求,避免啟動(dòng)多余的進(jìn)程造成額外的資源消耗。
(2)工作者(Worker)MPM。此模式與預(yù)派生多模塊相同,不同在于它是由子進(jìn)程創(chuàng)建的線程監(jiān)聽(tīng)客戶請(qǐng)求,由父進(jìn)程始終監(jiān)控。
(3)獨(dú)立子進(jìn)程(Perchild)MPM。進(jìn)程和線程的混合模式,與工作MPM想比較,每個(gè)子進(jìn)程創(chuàng)線程數(shù)量不一樣。當(dāng)遇到服務(wù)器上的負(fù)載過(guò)重,此模式只在當(dāng)前的子進(jìn)程一致上創(chuàng)建新的線程為客戶提供服務(wù)而不會(huì)重新創(chuàng)建一個(gè)字進(jìn)程。因此這種方式的可擴(kuò)展性高,但可靠率低[2]。
2 Apache服務(wù)器與動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)整合
2.1 網(wǎng)頁(yè)技術(shù)的工作原理
網(wǎng)頁(yè)技術(shù)中的動(dòng)態(tài)網(wǎng)頁(yè)的信息的處理是根據(jù)客戶的需求不斷變化的。而動(dòng)態(tài)網(wǎng)頁(yè)就是指由客戶進(jìn)行信息訪問(wèn)輸入,服務(wù)器作出響應(yīng)后處理不同的信息,然后把處理的結(jié)果反饋給客戶。如若用戶在信息請(qǐng)求時(shí)都是用的一個(gè)包含動(dòng)態(tài)語(yǔ)言代碼的網(wǎng)頁(yè),服務(wù)器端將根據(jù)由用戶發(fā)出的請(qǐng)求頁(yè)面的頁(yè)面名稱后綴識(shí)別使用的是哪種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),并把此頁(yè)面提交給解釋引擎,由解釋引擎定位動(dòng)態(tài)網(wǎng)頁(yè)腳本代碼,并把最終的處理結(jié)果反饋給Web服務(wù)器。相較于靜態(tài)網(wǎng)頁(yè)而言,動(dòng)態(tài)頁(yè)面是經(jīng)過(guò)服務(wù)端處理后,根據(jù)用戶的不同的輸入而返回了并生成一個(gè)結(jié)果顯示在頁(yè)面上。目前常見(jiàn)的實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面的技術(shù)分別有通用網(wǎng)關(guān)接口(Common Gateway Interface,CGI),PHP,JSP.NET.ASP.NET等[3]。
2.2 網(wǎng)頁(yè)技術(shù)整合的原因
由于Apache在處理靜態(tài)網(wǎng)頁(yè)方面具有明顯優(yōu)勢(shì),在初始安裝Apache軟件時(shí),它只支持CGI這種老式動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),但Apache可以和很多動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)兼容,并可以安裝第三方軟件獲取更多的功能,例如LAMP(Linux-Apache-MySQL-PHP)平臺(tái)的搭建,就是在Apache中通過(guò)安裝配置第三方的軟件和模塊及和其他軟件綜合應(yīng)用,實(shí)現(xiàn)對(duì)各種流行動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)的支持,Apache+PHP+MySQL被認(rèn)為是在Linux平臺(tái)上最佳組合之一。
3 動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的整合—LAMP平臺(tái)的搭建問(wèn)題
LAMP架構(gòu)是目前開發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的一個(gè)Web服務(wù)的框架,在很多商業(yè)應(yīng)用中屬于主流框架應(yīng)用。它和Java/J2EE架構(gòu)、微軟的.net等架構(gòu)的網(wǎng)頁(yè)開發(fā)相比,LAMP優(yōu)勢(shì)比較明顯,這也是很多企業(yè)搭建網(wǎng)站的首選平臺(tái),它的跨平臺(tái)性、通用性及性價(jià)比等是其他架構(gòu)平臺(tái)不能比擬的[4]。LAMP架構(gòu)平臺(tái)由Linux+Apache+Mysql+PHP組成,在此對(duì)該系統(tǒng)平臺(tái)的安裝搭建及問(wèn)題的解決方式進(jìn)行了解和研究。
3.1 LAMP平臺(tái)的組成與工作原理
LMAP的各個(gè)組件主要由Linux操作系統(tǒng)、Apache、PHP開源腳本語(yǔ)言和開源數(shù)據(jù)MySQL組成。LAMP平臺(tái)工作原理如圖1所示。當(dāng)一個(gè)用戶訪問(wèn)PHP頁(yè)面時(shí),先訪問(wèn)Apache服務(wù)器,當(dāng)Apache服務(wù)器無(wú)法識(shí)別PHP頁(yè)面,可通過(guò)Apache里面的phpmod傳給php體系,php根據(jù)用戶出過(guò)來(lái)的參數(shù)訪問(wèn)mysql數(shù)據(jù)庫(kù),mysql數(shù)據(jù)庫(kù)再把根據(jù)參數(shù)查詢出來(lái)的表返回給PHP,由PHP直接生成HTML網(wǎng)頁(yè)傳回給Apache服務(wù)器,供用戶訪問(wèn)。
3.2 LAMP平臺(tái)搭建配置的常見(jiàn)問(wèn)題
安裝一個(gè)LAMP的應(yīng)用軟件,首先必須在Linux操作系統(tǒng)下安裝好Apache,PHP和MySQL。相對(duì)于靜態(tài)Web服務(wù)器,在平臺(tái)搭建的配置安裝過(guò)程中,會(huì)出現(xiàn)很多安裝問(wèn)題,由于配置的復(fù)雜性,不能一一列舉解決方式,從中選出幾個(gè)常見(jiàn)的問(wèn)題,提出解決方案。
3.2.1 在安裝Apache完畢啟動(dòng)時(shí),出現(xiàn)提示性錯(cuò)誤,Apache無(wú)法正常啟動(dòng)
Apache無(wú)法正常啟動(dòng),系統(tǒng)會(huì)在顯示器上顯示錯(cuò)誤提示信息,第一種是httpd.conf文件配置出錯(cuò),對(duì)于這種情況,Apache啟動(dòng)會(huì)給出相應(yīng)的相關(guān)提示信息,用戶可以根據(jù)提示信息更改httpd.conf中的配置以修復(fù)錯(cuò)誤。第二種是可以查看日志信息,通過(guò)日志信息解決錯(cuò)誤信息。例如防火墻及SELinux是否允許Apache服務(wù)器運(yùn)行。第三種,監(jiān)聽(tīng)端口被占用,Apache默認(rèn)的監(jiān)聽(tīng)端口是80.提示有進(jìn)程占用此端口,Apache啟動(dòng)時(shí)也會(huì)出現(xiàn)錯(cuò)誤。用戶可以通過(guò)netstat–an命令獲取系統(tǒng)當(dāng)前的端口使用情況,關(guān)閉占用端口進(jìn)程或用kill命令結(jié)束占用端口的進(jìn)程號(hào)[5]。
3.2.2 無(wú)法載入PHP模塊
由于centos啟動(dòng)受SELinux保護(hù),在完成PHP模塊配置后,重啟Apache,將出現(xiàn)PHP模式無(wú)法載入的錯(cuò)誤。這是由Linux的selinux保護(hù)模式引起的,可以通過(guò)以下方法解決。但這種解決方法是臨時(shí)的,當(dāng)計(jì)算機(jī)重啟后配置將會(huì)失效,如果希望永久生效,可以編輯/etc/selinux/config文件,找到配置選項(xiàng),SELINUX=enforcing更改為以下內(nèi)容:SELINUX=disabled。最后重啟Apache服務(wù)器。
操作命令
#vi /etc/selinux/config
設(shè)置內(nèi)容
SELINUX=disabled
3.2.3 忘記root用戶口令解決方法
MySQL的系統(tǒng)管理員賬號(hào)為root。擁有數(shù)據(jù)庫(kù)中最高級(jí)別的權(quán)限,如果忘記root用戶口令,可以通過(guò)結(jié)束MySQL進(jìn)程,一—skip-grant-tables選項(xiàng)啟動(dòng)MySQL。然后進(jìn)入MySQL并更改root用戶口令。
操作命令
#killall mysqld
#/usr/local/mysql/bin/mysqld_safe –skip-grant-tables &
#./mysql
Mysql>use mysql
mysql> update user SET password=password(‘userpasswd) WHERE
user=root;
[參考文獻(xiàn)]
[1]余柏山.Linux系統(tǒng)管理與網(wǎng)絡(luò)管理[M].北京:清華大學(xué)出版社,2011.
[2]鳥哥.鳥哥的私房菜—服務(wù)器架設(shè)篇[M].3版.北京:機(jī)械工業(yè)出版社,2013.
[3]梁如軍.Linux應(yīng)用基礎(chǔ)教程-RedhatenterpriseLinux[M].北京:機(jī)械工業(yè)出版社,2013.
[4]張建華.LAMP從入門到精通[M].杭州:浙江大學(xué)出版社,2006.
[5]巴雷德.PHP應(yīng)用程序安全編程[M].北京:機(jī)械工業(yè)出版社,2010.