伺服器架設筆記——編譯Apache及其外掛程式

來源:互聯網
上載者:User

標籤:

        之前一直從事Windows上的用戶端軟體開發,經常會處理和伺服器互動相關的業務。由於希望成為一個全棧式的工程師,我對Linux上伺服器相關的開發也越來越感興趣。趁著年底自由的時間比較多,我可以對這塊做些技術研究。雖然這些知識很基礎也很老,但是對我這樣的新人來說還是挺有意思的。

        初期目標是可以讓虛擬機器中的服務架設成功,且實體機可以訪問。伺服器我選擇了相對熟悉點的Ubuntu——Ubuntu Server 14.04.1 LTS 32位版本(http://releases.ubuntu.com/14.04.1/ubuntu-14.04.1-desktop-i386.iso.torrent)。而服務我則選用大名鼎鼎的Apache。(轉載請指明出於breaksoftware的csdn部落格)

簡易安裝Apache

        我先在虛擬機器的ubuntu上安裝軟體源上的Apache。為了簡便,我直接使用了tasksel命令


        開啟軟體配置介面


        然後使用空格選中LAMP server。使用斷行符號確認選擇,這樣將自動安裝相關軟體——包括Apache。待安裝完畢,使用service httpd start方式啟動http服務。這樣我便可以在實體機上使用ip訪問該服務了。

        但是這兒有個問題,我們始終訪問的是一個靜態頁面。而現實中http伺服器要實現更多更複雜的功能。比如我們日常使用的Log Service,一般需要解析URL,並將一些參數做相關運算後放入資料庫中。顯然這樣的需求是一個靜態頁面無法滿足的。

編譯Apache

        作為一款著名的服務軟體,能得到如此的市場佔有率,必然有其很多優點。其中一個優點肯定是其構架是良好的——可以想象,其構架也必然是“對擴充開放”的。否則增加一點需求,就得去閱讀和修改Apache的源碼,無疑將大大提高使用者的難度,便不會有如此多的使用者。那我們我們希望可以處理url解析這樣的簡單需求,肯定也是通過外掛程式這類的方式實現的。然而,我們編譯一個外掛程式,一般是需要藉助一些庫——軟體內建的庫、軟體關聯的庫……那麼為了不遺漏這樣那樣的庫,我們就需要構建一個環境——可以完全編譯Apache源碼的環境——連Apache都可以編譯,那麼其最基礎功能的外掛程式肯定也可以編譯。

        從http://httpd.apache.org/download.cgi下載Apache源碼。目前使用的是2.4.12這個版本。擷取完該壓縮包,我們將它解壓到/usr/src目錄下

wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.12.tar.gztar  xvfz httpd-2.4.12.tar.gz -C /usr/src
        我們切入解壓目錄,執行

./configure
        我們發現,如果環境尚不完善,將會報缺少APR和APR-Util和PCRE庫。

        ARP庫        官網:http://apr.apache.org/

wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.1.tar.gztar xvfz apr-1.5.1.tar.gz -C /usr/src./configure --prefix=/usr/local/aprmakemake install

        ARP-Util庫        官網:http://apr.apache.org/

wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gztar xvfz apr-util-1.5.4.tar.gz -C /usr/srcmv apr-util-1.5.4 /usr/src/./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/aprmakemake install

        PCRE庫        官網:http://pcre.org/

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gztar xvfz pcre-8.36.tar.gz -C /usr/src./configure --prefix=/usr/local/pcremakemake install

        openssl庫        

        官網:http://www.openssl.org/source/

        因為https等模組會用到加密等方法,所以我們要拉取openssl。Ubuntu系統中好像已經帶了openssl的庫檔案。但是我們在編寫外掛程式時,會使用到它的標頭檔,所以我們也把它拉取和編譯下。

wget http://www.openssl.org/source/openssl-1.0.2.tar.gztar xvfz openssl-1.0.2.tar.gz./config --prefix=/usr/local/opensslmakemake install
        這些庫準備好後,我們就再到Apache的解壓目錄下,執行./configure就行了(可能需要指定部分庫的路徑)。./configure還有很多參數可以供選擇,具體我不在這兒說明了。因為我們前期目標是搭建成功——能用就行。


        如果我們之前已經安裝了源中的Apache,那就要卸載掉它——apt-get remove apache2。

        經過漫長的編譯,Apache終於編譯完了。但是事情總不能一帆風順,我運行可執行檔httpd時,會報libpcre.so.1(64位系統好像是報libpcre.so.0)找不到(使用lld httpd查看檔案關聯)。還好這種找不到檔案的問題很好解決:


        啟動Apache:


        使用ifconfig查看IP,我們在宿主電腦的瀏覽器裡輸入IP。我們將得到如下結果:


        至此,我們編譯的Apache跑起來了。編譯外掛程式的環境也準備就緒。

編譯、添加外掛程式

        在Apache編譯完的./bin目錄下,有個axps檔案。它的全稱是:APache eXtenSion tool。顧名思義,它是幫我們產生擴充外掛程式的協助工具輔助(為了方便使用它,我們要將其所在目錄放到環境變數中vim /etc/environment; source /etc/environment)。它的使用非常簡單,比如我們要建立一個外掛程式叫hello world。則我們使用

apxs -g -n hello_world

        其中-g是指示apxs產生一個模板項目,-n是用於指定項目名。這兩個參數一般一塊使用。

        然後我們就可以編譯該模組,並將模組註冊到Apache的配置中。

apxs -c -i -a mod_hello_world.c
        編譯成功將出現


        -c指令指示編譯工程;-i指令指示將編譯出來的模組拷貝到Apache的modules目錄下(mod_hello_world.so)。-a指令指示修改Apache設定檔httpd.conf,讓模組載入流程去載入這個so。

        一般情況下,-c是單獨使用的。-i -a是結合使用的,且它們可以省略,因為它只是拷貝檔案和修改配置,而我們在開發的時候可能不需要拷貝so到Apache的modules目錄下,而只用修改httpd.conf以指示其so的路徑。比如:我在conf中新增如下一行


        我們回過來再看看,模組的邏輯——mod_hello_world.c的內容


        現在我們並不對該檔案進行解讀,而是粗略發現如下幾點:

  • 我們的請求將和hello_world欄位有關。
  • 我們要使用一套特定的api去操作內部邏輯——如ap_rpus這個函數。

        在該檔案注釋段,告訴我們需要手工修改httpd.conf檔案,新增如下


        這段配置什麼作用,我們這節也不去深究。

        一切完畢後,我們重啟Apache——./httpd -k restart。

        在實體機訪問



        我們如願幹涉了伺服器的返回結果,完成了我們初步的目標。之後的章節中,我們將詳細研究如果編寫更加複雜的外掛程式。


參考資訊:

http://wiki.ubuntu.org.cn/Apache

http://httpd.apache.org/docs/2.4/install.html

http://httpd.apache.org/docs/2.4/programs/configure.html

http://httpd.apache.org/docs/2.4/en/programs/apxs.html       

伺服器架設筆記——編譯Apache及其外掛程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.