apache動靜態(tài)編譯-創(chuàng)新互聯(lián)

為了使Apache支持https訪問,系統(tǒng)需要安有apache、openssl、mod_ssl.so

創(chuàng)新互聯(lián)主營麗江網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),麗江h(huán)5微信小程序搭建,麗江網(wǎng)站營銷推廣歡迎麗江等地區(qū)企業(yè)咨詢

1、安裝openssl:

基本上系統(tǒng)都已經(jīng)安裝了,在/usr/bin/openssl下,直接使用openssl命令即可;如果系統(tǒng)未安裝,則下載openssl進(jìn)行安裝。

2、安裝mod_ssl.so:

現(xiàn)在Apache都自帶了這個模塊,默認(rèn)是不安裝的。安裝方式有兩種:靜態(tài)編譯和動態(tài)加載。

靜態(tài)編譯:即在編譯安裝apache的時候,在./configure的時候添加--enable--ssl,這樣mod_ssl.so模塊就加載進(jìn)了Apache。(如果已經(jīng)static編譯過的模塊,再次修改httpd.conf方式用loadmodule命令,在啟動apache時會報"模塊名" is built-in and can't be loaded.的錯誤。)

動態(tài)編譯:無需重新編譯apache,直接進(jìn)入[source]/modules/ssl;執(zhí)行[apache]/bin/apxs -a -i -c -L/usr/lib/openssl/engines/lib -c *.c -lcrypto -lssl -ldl;這種方式加載之后,在apache的安裝目錄下的modules目錄會生成一個mod_ssl.so,同時httpd.conf中會增加一行LoadModule php5_module modules/libphp5.so([apache]表示Apache的安裝目錄,[source]表示Apache源碼目錄)

注:

apxs命令參數(shù)說明:
-i  此選項表示需要執(zhí)行安裝操作,以安裝一個或多個動態(tài)共享對象到服務(wù)器的modules目錄中。
-a  此選項自動增加一個LoadModule行到httpd.conf文件中,以激活此模塊,或者,如果此行已經(jīng)存在,則啟用之。
-A  與 -a 選項類似,但是它增加的LoadModule命令有一個井號前綴(#),即此模塊已經(jīng)準(zhǔn)備就緒但尚未啟用。
-c  此選項表示需要執(zhí)行編譯操作。它首先會編譯C源程序(.c)files為對應(yīng)的目標(biāo)代碼文件(.o),然后連接這些目標(biāo)代碼和files中其余的目標(biāo)代碼文件(.o和.a),以生成動態(tài)共享對象dsofile 。如果沒有指定 -o 選項,則此輸出文件名由files中的第一個文件名推測得到,也就是默認(rèn)為mod_name.so 

靜態(tài):
在使用./configure 編譯的時候,如果不指定某個模塊為動態(tài),即沒有使用:enable-mods-shared=module或者enable-module=shared 這個2個中的一個,那么所有的默認(rèn)模塊為靜態(tài)。 那么何謂靜態(tài)?  其實就是編譯的時候所有的模塊自己編譯進(jìn) httpd 這個文件中(我們啟動可以使用這個執(zhí)行文件,如: ./httpd & ) ,啟動的時候這些模塊就已經(jīng)加載進(jìn)來了,也就是可以使用了, 通常為:<ifmodule> </ifmodule> 來配置。所以大家看到的配置都是 <ifmodule  module.c>  ,很顯然,module.c這個東西已經(jīng)存在 httpd這個文件中了。

動態(tài):
就是編譯的時候,使用enable-module=shared 或者enable-modules-shared=module 來動態(tài)編譯。  那么什么是動態(tài)?  靜態(tài)是直接編譯進(jìn)httpd中, 那么動態(tài)顯然就不編譯進(jìn)去了,也就是你啟動的時候根本不會加載這個模塊, 而是給你一個module.so 文件,你一定要使用 loadmodule 這個語法來加載,這個模塊才有效。

那么區(qū)別就出來了:靜態(tài)的模塊通常是<ifmodule></ifmodule> 來配置, 動態(tài)使用loadmoule來加載,然后再配置。
至于性能方面我沒怎么關(guān)注, 官方說靜態(tài)的比動態(tài)的在性能方面多5%左右。
動態(tài)相對方便一點(diǎn), 如果你編譯完后,發(fā)現(xiàn)有些需要的模塊你沒編譯進(jìn)去(默認(rèn)編譯多少模塊呢?你用./configure --help | grep disable查看, 會讓你去disable表示默認(rèn)會編譯進(jìn)去,否者disable有什么用呢?)你可以動態(tài)的加載, 只要你有module.so文件。

首先看看編譯apache的選項含義

對于apache 1.3.x
./configure --prefix=/usr/local/apache \
--enable-module=so \
--enable-module=most  \
--enable-shared=max \
--enable-module=rewrite

對于apache 2.0.x
./configure --prefix=/usr/local/apache2 \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite

對于apache 2.2.0
./configure --prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite

舉例一:編譯一個apache2.2.8版本
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=most --enable-rewrite --enable-forward
說明:
so模塊用來提供 DSO 支持的 apache 核心模塊.
--enable-so 選項:讓 Apache 可以支持DSO模式,注意,這里采用的是 Apache2.0 的語法。如果你的Apache 是1.3版本,應(yīng)改為--enable-module=so

--enable-mods-shared=most選項:
告訴編譯器將所有標(biāo)準(zhǔn)模塊都動態(tài)編譯為DSO模塊。
如果用的是 Apache1.3, 改為--enable-shared=max就可以。

-enable-rewrite選項:支持地址重寫功能,使用1.3版本的朋友請將它改為--enable-module=rewrite
--enable-module=most
用most可以將一些不常用的,不在缺省常用模塊中的模塊編譯進(jìn)來.
--enable-mods-shared=all意思是動態(tài)加載所有模塊,如果去掉-shared話,是靜態(tài)加載所有模塊.

舉例二:
執(zhí)行 ./configure --prefix=/server/apache/ \
--enable-deflate=shared \
--enable-headers=shared \
--enable-rewrite=shared \
--enable-mods-shared=most

--enable-mods-shared=all意思是動態(tài)加載所有模塊,如果去掉-shared話,是靜態(tài)加載所有模塊。
--enable-mods-shared=most則是動態(tài)編譯大部分常用的模塊,當(dāng)然,也可以有選擇的加載一些模塊,most意思是只包含通常用的模塊,并且以動態(tài)加載模式加載. 記住apache1.xx和apache2.xx的模塊編譯寫法是不一樣的.

下面我來說說上面幾種模塊的作用:
deflate模塊作用為讓服務(wù)器實現(xiàn)gzip功能,可以大大降低服務(wù)器的帶寬消耗。(為什么這么說,我來說給你聽,比如一個大小為700KB的網(wǎng)頁,但是通過壓縮功能,我們把壓縮到70KB,然后吧壓縮到的70KB傳到WEB客戶端,實際上這不就是降低帶寬的消耗嗎?)但是卻有個致命的缺點(diǎn),那是以消耗服務(wù)器的CPU,內(nèi)存資源為代價的。
注:
apache1.xx版本中這個模塊名叫mod_gzip模塊,在apache2.xx中才被deflate模塊所替代。
headers功能如上,跟deflate配套使用。
rewrite這個模塊的作用很重要,防盜鏈幾乎全靠它了。
為了有什么這么一條,我前面還要加載那3個模塊呢,其實也沒什么,當(dāng)時只是擔(dān)心那3個模塊不在“通用”范疇內(nèi),所有手動添加了。就加著吧,反正沒任何問題。
這里我來解釋下什么叫動態(tài)加載和靜態(tài)加載?
說簡單,并用打比喻的方式來解釋.

好比有兩個人a和m
a代表apache,m代表module
要想讓a使用m的東西
一個方法是把m的東西都放到a那里去,a使用的時候就是現(xiàn)成的了
就是所謂的靜態(tài)編譯

還有一個方法,
就是告訴a, m的住址,當(dāng)a要使用m的東西的時候,a去找m,然后使用
不過,這種方法要注意的一個問題就是:m必須要有實際的住址,
否則a會找不到m而產(chǎn)生錯誤的,我此文開始提到的 apachectl startssl產(chǎn)生
的錯誤就是這個原因,應(yīng)該再編譯好ssl才可以的.
這種方法也就是apache 的動態(tài)(DSO)編譯了

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

當(dāng)前文章:apache動靜態(tài)編譯-創(chuàng)新互聯(lián)
鏈接分享:http://muchs.cn/article48/cddchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站制作動態(tài)網(wǎng)站、服務(wù)器托管微信公眾號、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)