WINDOWS 平臺APACHE模塊開發環境搭建
1.windows下安裝apache
下載地址:http://apache.dataguru.cn//httpd/binaries/win32/
注意:一定要custom全部安裝,否則就不會有include和lib目錄
本文選擇安裝XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包,該軟件的下載與安裝很簡單,在安裝過程中,會選擇下載的工具包,Apache爲必選項,其餘根據開發環境爲可選項,當然全部下載也沒問題。使用該集成包的好處在於不用配置php環境,推薦新手安裝。
2.安裝apxs
下載地址:http://www.apachelounge.com/download/apxs_win32.zip
下載後,解壓到任意盤下均可(最好放在根目錄下,方便添加環境變量);
打開命令提示符,定位到apxs的安裝目錄下,例如:D:\xampp\apxs,執行命令:
perl Configure.pl --with-apache2=\Path\to\Apache2 --with-apache-prog=httpd.exe
其中\Path\to\Apache2需要替換爲Apache的實際安裝路徑,示例輸入如下圖一所示,示例輸出如下圖二所示:
圖一
圖二
上圖提示‘perl’不是內部或外部命令,因爲我們將要使用的apxs包要用到perl解析編譯,所以,我們還需要安裝perl。
安裝完apxs工具後,需要手動將apxs加入到系統環境變量中,添加完之後將目錄切換到Apache安裝目錄下的bin文件夾,在命令窗口輸入apxs命令,若出現如下圖三的幫助信息,則表明apxs的環境配置完成:(若提示“apxs不是內部或外部命令,也不是可運行的程序”,可檢查環境變量是否添加成功)
圖三
3.安裝Perl
下載地址:http://www.activestate.com/activeperl/
Perl的安裝比較簡單,直接安裝就行,只是在完成的最後一步需要注意勾選將Perl添加到環境變量的選項,如下圖四所示:
圖四
安裝完成後,再次執行上述命令:
perl Configure.pl --with-apache2=\Path\to\Apache2 --with-apache-prog=httpd.exe
若成功生成圖五中框選的三個.bat文件,則表明安裝成功
圖五
4.使用apxs
搭建完以上環境之後,就可以在apache中生成自己的模塊了,apxs編譯時還需用到C/C++編譯器,一般有兩種選擇,一種是使用VC(Visual Studio)自帶的編譯器,還有一種就是自行安裝,比如minGW等。
對使用VS編譯的,可嘗試修改apache下的build目錄中config_vars.mk配置文件,操作如下:(本人在修改該配置文件的時候,發現CC和LD均爲空,可能與VS的版本有關,這時只需要在其後添加cl.exe和 link.exe,然後去掉gcc-E即可)
注意:若未修改此項,則編譯會報:’/nologo’不是內部或外部命令。
(1)運行Visual Studio 2012 命令提示(打開方式請看本文最後一張貼圖)
(2)運行apxs -g -n helloworld(helloworld爲模塊名),會生成一個叫helloworld的目錄和模板代碼
(3)進入helloworld目錄,編輯mod_helloworld.c(這就是我們要開發的模塊代碼)
(4)運行apxs -c -i -a mod_helloworld.c libapr-1.lib libaprutil-1.lib libapriconv-1.lib libhttpd.lib,生成mod_helloworld.so,這時我們可以到APACHE下的模塊路徑(\Apache\modules)中查看自己添加的模塊,若沒找到剛添加的mod_helloworld.so文件,則將該模塊拷貝到\…\modules目錄下。
(5)修改Apache的配置文件,路徑:Apache\conf\httpd.conf,在末尾加上如下內容:(這一步非常關鍵,沒有修改配置文件,會使添加的模塊不起作用,通常apache會自動生成下面的第一行語句,這時只需添加下面的三行語句即可,若沒有自動生成,則要注意LoadModule後面需要添加mod_helloworld.so的絕對路徑)
當然,如果我們安裝的是XAMPP時,可以直接在XAMPP的操作界面中,點擊”Config”按鈕,然後選擇”Apache(httpd.conf)”,就可以修改apache的配置文件。
(6)啓動apache服務器,在瀏覽器的地址欄輸入localhost:端口號/helloworld,就可以看到我們返回的內容了。其中的端口號爲配置apache的端口號,默認爲80,若使用80端口無法啓動apache服務器,則表面80端口被佔用,這時需要修改apache的端口號,可在apache\conf\httpd.conf中修改。將配置文檔中的所有80端口都改爲一個未佔用的端口即可。
注意1:若在執行上述步驟四時出現如圖六錯誤,則表面沒有使用VS本機工具命令提示,windows操作系統上的cmd窗口是不識別cl.exe命令的。
圖六
注意2:在進行apache開發時,apache內部是不支持printf打印消息的,若想打印消息日誌,需要自定義宏進行消息打印。
注意3: 當apache開啓的時候,彈出應用程序終止對話框,此時可查看httpd.conf中加載的模塊。若so文件中沒有此加載模塊,而配置文件中包含該加載模塊,則會導致apache開啓失敗。
注意4:apache加載的自定義模塊都是互相干擾的。
在我們添加helloworld模塊的時候,會在httpd.conf中添加這樣一行命令<Location /helloworld>,其實我們添加的自定義模塊就是通過”/helloworld”來確定是否被訪問的,即我們要訪問mod_helloworld.so模塊時,只需在瀏覽器中輸入localhost:端口號/helloworld/…就行,helloworld後面可以輸入任何你需要請求的URL;但是當我們添加了另外一個模塊,並設置<Location /helloworld/test>時,這時如果輸入localhost:端口號/helloworld/test,apache就會調用我們的第二個模塊,而並非第一個。
注意5:每一次修改完apache的配置文件或者重新編譯生成.so文件後,都必須重啓apache服務器纔會生效。
注意6:使用apxs編譯多個.c文件時,必須將生成so文件對應的.c文件放在最前面,其他的.c文件放置無先後順序。例如:要生成一個helloworld.so的模塊,若apache中定義的鉤子,容器等函數在helloworld.c文件中,則helloworld.c文件必須放在第一位。
圖七