在Apache服務(wù)器上運(yùn)行mod_perl
現(xiàn)在網(wǎng)上已經(jīng)有大量的關(guān)于成功運(yùn)行mod_perl模塊的介紹, 該模塊可以讓Perl程序員更
好地控制 Apache服務(wù)器。一旦Apache服務(wù)器中內(nèi)置了mod_perl的Perl解釋器, Perl腳
本就可以快速執(zhí)行,使得你的網(wǎng)頁(yè)的訪問者無(wú)需等待。
如果你打算擴(kuò)展Apache Web server的功能,你可以試試mod_perl模塊的威力。模塊是個(gè)集成到一起的程序集合,可以讓網(wǎng)絡(luò)開發(fā)者擴(kuò)展其服務(wù)器的功能,而無(wú)需修改服務(wù)器軟件自身。一旦有了模塊,你就可以增強(qiáng)服務(wù)器的功能,例如在指定的時(shí)間段內(nèi),可以重定向URL,或者也可以對(duì)你的服務(wù)器進(jìn)行優(yōu)化,以便讓Perl腳本運(yùn)行得更快。
現(xiàn)已經(jīng)有大量功能強(qiáng)大的mod_perl模塊的例子, 該模塊可以讓Perl程序員更好地控制其
Apache服務(wù)器。Apache服務(wù)器中內(nèi)置了mod_perl的Perl解釋器, 使得Perl腳本可以快
速執(zhí)行,你的網(wǎng)頁(yè)的訪問者就無(wú)需等待。
我將介紹兩個(gè)關(guān)于安裝模塊的例子,其中第二個(gè)例子將介紹mod_perl模塊。一旦你了
解了這個(gè)過程,你就可以為Apache網(wǎng)絡(luò)服務(wù)器配置其它各種不同的模塊。請(qǐng)看
Apache Module Registry,了解一下可以下載哪些增強(qiáng)的功能。
模塊入門
擴(kuò)展使用模塊的Apache是相當(dāng)方便的, 只要下載打算要用的模塊。要了解如何
安裝和使用模塊,我用如下一個(gè)簡(jiǎn)單的例子來闡明:當(dāng)服務(wù)器接收到一個(gè)給定頁(yè)面
的請(qǐng)求時(shí),服務(wù)器返回"Hello World"。
假設(shè)你已經(jīng)完成如下工作:在Apache安裝時(shí),已經(jīng)帶有了編譯過的 mod_so模塊,如果
已經(jīng)完成該步,就可以添加新模塊到Apache中,而無(wú)須再編譯。為了判斷是否已經(jīng)安裝
編譯過的 mod_so模塊,可以運(yùn)行/httpd -l , 看看是否有mod_so。 如果沒有,
請(qǐng)閱讀Dynamic Shared Object的中有關(guān)技術(shù)資料,重新配制你的服務(wù)器,以便包含mod_so。
要運(yùn)行Hello World模塊, 先要下載mod_hello_world.c 文件,該.c文件是用來編譯
成.so文件的,你要使用apxs命令來進(jìn)行編譯,可以把編譯后的文件保存在任何地方,
你可以執(zhí)行類似如下的命令:
apxs -c -o mod_babble.so mod_babble.c
為了讓Hello World模塊能夠在你的服務(wù)器上運(yùn)行,就要編譯mod_hello_world,之
后,就會(huì)創(chuàng)建一個(gè)名為mod_hello_world.so的文件,把該文件復(fù)制到Apache的libexec目
錄中,此時(shí),我們已經(jīng)完成了一半的任務(wù),我們現(xiàn)在只要修改conf目錄中的httpd.conf
文件:打開httpd.conf文件,找到LoadModule 行,在該部分的最后一行后面,添加如下行:
LoadModule hello_world_module libexec/mod_hello_world.so
如果你有ClearModuleList,在你的配置文件中就會(huì)有AddModule部分,(如果你
沒有ClearModuleList,你可以跳過此步)在AddModule部分的末尾,添加如下行:
AddModule mod_hello_world.c
最后,在配置文件的AddModule部分后面的任何一處,添加如下內(nèi)容:
<Location /hello>
SetHandler hello_world
</Location>
該行告訴Apache,任何對(duì)名為"/hello"的頁(yè)面的請(qǐng)求,將會(huì)被轉(zhuǎn)到
hello_world模塊,現(xiàn)在,重新啟動(dòng)網(wǎng)絡(luò)服務(wù)器,發(fā)出請(qǐng)求: http://localhost/hello.
你將在你的瀏覽器中看到"Hello World!" 。
選擇合適的模塊
我們現(xiàn)在遇到的最大問題是:在構(gòu)造模塊時(shí),只用到C語(yǔ)言編寫的模塊, 為了讓這
些程序能夠在特定的服務(wù)器上運(yùn)行,這些源程序在編譯時(shí)還必須帶上正確的編譯開關(guān)。
在每次安裝Apache時(shí),都必須重新編譯這些源程序。要了解使用哪些編譯開關(guān)的問題,
可以通過運(yùn)行Apache附帶的apxs腳本來獲得,但是每次在新的服務(wù)器上運(yùn)行時(shí),都得重
新編譯該模塊,重新編譯始終是個(gè)問題。
有個(gè)模塊可以解決這些問題,而且該模塊還帶有更多其他的功能,這就是mod_perl模塊,
其功能很強(qiáng)大,本文只能為大家作一些該模塊的簡(jiǎn)單介紹。
為什么使用mod_perl?
mod_perl 模塊的提供的一個(gè)特色是:可以用Perl語(yǔ)言來編寫Apache 模塊,Perl 是
解釋性語(yǔ)言,其優(yōu)缺點(diǎn)并存。解釋性語(yǔ)言的一個(gè)主要優(yōu)點(diǎn)是:每次安裝服務(wù)器時(shí),不必重新
編譯這個(gè)模塊。缺點(diǎn)是需要一個(gè)解釋器來閱讀和執(zhí)行實(shí)際的程序,這會(huì)降低服務(wù)器的運(yùn)行速度,
通過在啟動(dòng)Apache服務(wù)器的同時(shí),啟動(dòng)Perl解釋器,這樣mod_perl就克服了運(yùn)行速度減慢的問題。
Perl解釋器還可以對(duì)服務(wù)器上的Perl代碼進(jìn)行預(yù)先解釋,并可以隨時(shí)捕捉到它,以便一旦
要用到該段代碼時(shí),能夠快速執(zhí)行。
使用mod_perl
mod_perl可以從mod_perl中下載得到 。對(duì)于mod_perl的安裝和編譯的介紹,超出了本文的篇幅,
在網(wǎng)上和mod_perl模塊中就提供了不少技術(shù)參考資料。為了向大家演示Perl模塊的使用,
我下載并復(fù)制了Hello.pm,這是個(gè)用Perl語(yǔ)言寫的Hello World模塊。你可以在Perl 5 Module List中找到更多的Perl模塊。
現(xiàn)在,我們需要設(shè)置Apache服務(wù)器,以便它可以找到我們希望使用的模塊。一開始,
要使用mod_perl,我們需要?jiǎng)?chuàng)建一個(gè)名為startup.pl 的文件,該文件將為mod_perl所使用,
將會(huì)告訴mod_perl所有已安裝程序的位置。我們將創(chuàng)建一個(gè)最小的startup.pl 文件,可以
用它來訪問要運(yùn)行的Hello World模塊,要使得其他模塊來說,也能夠正常工作,就需要
修改startup.pl 文件。在你的startup.pl 文件中,應(yīng)包含如下內(nèi)容:
# Always a good thing to put at the top of every mod_perl . This will
# save many headaches as you work.
use strict;
# Tell mod_perl where to find Hello.pm module
use lib qw(path/to/module)
# The name of the module to load using mod_perl
use Apache::Hello;
# This must return TRUE, and this line accomplishes that, and conveniently
# also checks to ensure that we are actually running mod_perl with our version
# of Apache.
$ENV{MOD_PERL} or die "not running under mod_perl!";
下一步,要使得Hello World模塊可以運(yùn)行,就要對(duì)Apache服務(wù)器進(jìn)行配置,以便
使用 mod_perl。在前面的例子中,我們使用了http://localhost/hello作為
訪問用C語(yǔ)言編寫的模塊的請(qǐng)求。 對(duì)于Perl模塊,我們使用hello_perl。要設(shè)置得正確,
就需要編輯httpd.conf 文件。在AddModule行后面的某處添加如下內(nèi)容:
PerlRequire /path/to/startup.pl.
<Location /hello_perl>.
SetHandler perl-.
PerlHandler Apache::Hello.
</Location> .
PerlRequire行告訴mod_perl到何處去尋找我們先前已經(jīng)創(chuàng)建的startup.pl文件。
標(biāo)記為L(zhǎng)ocation 的一節(jié)將告訴Apache服務(wù)器,對(duì)/hello_perl的請(qǐng)求應(yīng)該用一個(gè)特殊
的方式進(jìn)行處理。在該節(jié)里,存在兩個(gè)指示語(yǔ):SetHandler和PerlHandler。
SetHandler指示語(yǔ)將告訴Apache,把所有的訪問請(qǐng)求發(fā)送到mod_perl,之后PerlHandler
就指示mod_perl應(yīng)該把這些請(qǐng)求轉(zhuǎn)發(fā)到Hello World的Perl模塊。
僅剩下最后一個(gè)步驟了:把Hello.pm文件復(fù)制到適當(dāng)?shù)奈恢谩R坏﹦?chuàng)建了startup.pl文件,
我們就規(guī)定好了Hello.pm模塊的位置。我們需要在那個(gè)位置創(chuàng)建一個(gè)目錄,把Hello.pm文件
復(fù)制到該Apache目錄中,所以,如果要在startup.pl 文件中把path/to/module設(shè)置
為/usr/local/apache/perl/modules,就可以執(zhí)行如下命令:
mkdir /usr/local/apache/perl/modules/Apache
cp Hello.pm
/usr/local/apache/perl/modules/Apache
這就把Hello World模塊放到Apache名稱空間中,確保沒有其他的Perl腳本同它沖突。
此時(shí), Apache和mod_perl都已經(jīng)設(shè)置好,可以運(yùn)行Hello World了。我們可以重啟動(dòng)服務(wù)器。
關(guān)鍵字:Apache 服務(wù)器 運(yùn)行 mod_perl
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解