


在Apache服務器上運行mod_perl
現在網上已經有大量的關于成功運行mod_perl模塊的介紹, 該模塊可以讓Perl程序員更
好地控制 Apache服務器。一旦Apache服務器中內置了mod_perl的Perl解釋器, Perl腳
本就可以快速執行,使得你的網頁的訪問者無需等待。
如果你打算擴展Apache Web server的功能,你可以試試mod_perl模塊的威力。模塊是個集成到一起的程序集合,可以讓網絡開發者擴展其服務器的功能,而無需修改服務器軟件自身。一旦有了模塊,你就可以增強服務器的功能,例如在指定的時間段內,可以重定向URL,或者也可以對你的服務器進行優化,以便讓Perl腳本運行得更快。
現已經有大量功能強大的mod_perl模塊的例子, 該模塊可以讓Perl程序員更好地控制其
Apache服務器。Apache服務器中內置了mod_perl的Perl解釋器, 使得Perl腳本可以快
速執行,你的網頁的訪問者就無需等待。
我將介紹兩個關于安裝模塊的例子,其中第二個例子將介紹mod_perl模塊。一旦你了
解了這個過程,你就可以為Apache網絡服務器配置其它各種不同的模塊。請看
Apache Module Registry,了解一下可以下載哪些增強的功能。
模塊入門
擴展使用模塊的Apache是相當方便的, 只要下載打算要用的模塊。要了解如何
安裝和使用模塊,我用如下一個簡單的例子來闡明:當服務器接收到一個給定頁面
的請求時,服務器返回"Hello World"。
假設你已經完成如下工作:在Apache安裝時,已經帶有了編譯過的 mod_so模塊,如果
已經完成該步,就可以添加新模塊到Apache中,而無須再編譯。為了判斷是否已經安裝
編譯過的 mod_so模塊,可以運行/httpd -l , 看看是否有mod_so。 如果沒有,
請閱讀Dynamic Shared Object的中有關技術資料,重新配制你的服務器,以便包含mod_so。
要運行Hello World模塊, 先要下載mod_hello_world.c 文件,該.c文件是用來編譯
成.so文件的,你要使用apxs命令來進行編譯,可以把編譯后的文件保存在任何地方,
你可以執行類似如下的命令:
apxs -c -o mod_babble.so mod_babble.c
為了讓Hello World模塊能夠在你的服務器上運行,就要編譯mod_hello_world,之
后,就會創建一個名為mod_hello_world.so的文件,把該文件復制到Apache的libexec目
錄中,此時,我們已經完成了一半的任務,我們現在只要修改conf目錄中的httpd.conf
文件:打開httpd.conf文件,找到LoadModule 行,在該部分的最后一行后面,添加如下行:
LoadModule hello_world_module libexec/mod_hello_world.so
如果你有ClearModuleList,在你的配置文件中就會有AddModule部分,(如果你
沒有ClearModuleList,你可以跳過此步)在AddModule部分的末尾,添加如下行:
AddModule mod_hello_world.c
最后,在配置文件的AddModule部分后面的任何一處,添加如下內容:
<Location /hello>
SetHandler hello_world
</Location>
該行告訴Apache,任何對名為"/hello"的頁面的請求,將會被轉到
hello_world模塊,現在,重新啟動網絡服務器,發出請求: http://localhost/hello.
你將在你的瀏覽器中看到"Hello World!" 。
選擇合適的模塊
我們現在遇到的最大問題是:在構造模塊時,只用到C語言編寫的模塊, 為了讓這
些程序能夠在特定的服務器上運行,這些源程序在編譯時還必須帶上正確的編譯開關。
在每次安裝Apache時,都必須重新編譯這些源程序。要了解使用哪些編譯開關的問題,
可以通過運行Apache附帶的apxs腳本來獲得,但是每次在新的服務器上運行時,都得重
新編譯該模塊,重新編譯始終是個問題。
有個模塊可以解決這些問題,而且該模塊還帶有更多其他的功能,這就是mod_perl模塊,
其功能很強大,本文只能為大家作一些該模塊的簡單介紹。
為什么使用mod_perl?
mod_perl 模塊的提供的一個特色是:可以用Perl語言來編寫Apache 模塊,Perl 是
解釋性語言,其優缺點并存。解釋性語言的一個主要優點是:每次安裝服務器時,不必重新
編譯這個模塊。缺點是需要一個解釋器來閱讀和執行實際的程序,這會降低服務器的運行速度,
通過在啟動Apache服務器的同時,啟動Perl解釋器,這樣mod_perl就克服了運行速度減慢的問題。
Perl解釋器還可以對服務器上的Perl代碼進行預先解釋,并可以隨時捕捉到它,以便一旦
要用到該段代碼時,能夠快速執行。
使用mod_perl
mod_perl可以從mod_perl中下載得到 。對于mod_perl的安裝和編譯的介紹,超出了本文的篇幅,
在網上和mod_perl模塊中就提供了不少技術參考資料。為了向大家演示Perl模塊的使用,
我下載并復制了Hello.pm,這是個用Perl語言寫的Hello World模塊。你可以在Perl 5 Module List中找到更多的Perl模塊。
現在,我們需要設置Apache服務器,以便它可以找到我們希望使用的模塊。一開始,
要使用mod_perl,我們需要創建一個名為startup.pl 的文件,該文件將為mod_perl所使用,
將會告訴mod_perl所有已安裝程序的位置。我們將創建一個最小的startup.pl 文件,可以
用它來訪問要運行的Hello World模塊,要使得其他模塊來說,也能夠正常工作,就需要
修改startup.pl 文件。在你的startup.pl 文件中,應包含如下內容:
# 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模塊可以運行,就要對Apache服務器進行配置,以便
使用 mod_perl。在前面的例子中,我們使用了http://localhost/hello作為
訪問用C語言編寫的模塊的請求。 對于Perl模塊,我們使用hello_perl。要設置得正確,
就需要編輯httpd.conf 文件。在AddModule行后面的某處添加如下內容:
PerlRequire /path/to/startup.pl.
<Location /hello_perl>.
SetHandler perl-.
PerlHandler Apache::Hello.
</Location> .
PerlRequire行告訴mod_perl到何處去尋找我們先前已經創建的startup.pl文件。
標記為Location 的一節將告訴Apache服務器,對/hello_perl的請求應該用一個特殊
的方式進行處理。在該節里,存在兩個指示語:SetHandler和PerlHandler。
SetHandler指示語將告訴Apache,把所有的訪問請求發送到mod_perl,之后PerlHandler
就指示mod_perl應該把這些請求轉發到Hello World的Perl模塊。
僅剩下最后一個步驟了:把Hello.pm文件復制到適當的位置。一旦創建了startup.pl文件,
我們就規定好了Hello.pm模塊的位置。我們需要在那個位置創建一個目錄,把Hello.pm文件
復制到該Apache目錄中,所以,如果要在startup.pl 文件中把path/to/module設置
為/usr/local/apache/perl/modules,就可以執行如下命令:
mkdir /usr/local/apache/perl/modules/Apache
cp Hello.pm
/usr/local/apache/perl/modules/Apache
這就把Hello World模塊放到Apache名稱空間中,確保沒有其他的Perl腳本同它沖突。
此時, Apache和mod_perl都已經設置好,可以運行Hello World了。我們可以重啟動服務器。
關鍵字:Apache 服務器 運行 mod_perl
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解