本文僅闡述Apache在Unix和類Unix系統(tǒng)中的編譯和安裝,在Windows中的編譯和安裝可以參考在Microsoft Windows中使用Apache。其他平臺可以參見針對特定平臺的說明文檔。
像其它許多開源項(xiàng)目一樣,Apache使用libtool
和autoconf
建立編譯環(huán)境。
如果你只進(jìn)行很小的版本升級(比如2.2.54→2.2.55),請直接跳轉(zhuǎn)到下面的升級部分。
下載 | $ lynx http://httpd.apache.org/download.cgi |
解壓 | $ gzip -d httpd-NN.tar.gz |
配置 | $ ./configure --prefix=PREFIX |
編譯 | $ make |
安裝 | $ make install |
配置 | $ vi PREFIX/conf/httpd.conf |
測試 | $ PREFIX/bin/apachectl -k start |
其中NN必須用當(dāng)前的副版本號替代;PREFIX是服務(wù)器被安裝到文件系統(tǒng)中的路徑名,如果沒有指定PREFIX,默認(rèn)會(huì)裝到/usr/local/apache2
下面從編譯和安裝Apache httpd的要求開始詳細(xì)闡述編譯和安裝的每個(gè)步驟。
編譯Apache的要求如下:
PATH
中必須包含指向基本編譯工具比如make
的路徑。ntpdate
或xntpd
來同步時(shí)間。有關(guān)NTP軟件的資料請參見NTP主頁。apxs
或dbmmanage
,需要Perl5解釋器(5.003或以上的版本就足夠了)。如果系統(tǒng)中存在多個(gè)Perl解釋器,比如有系統(tǒng)提供的Perl 4,還有你自己安裝的Perl 5,推薦你使用 --with-perl
選項(xiàng)來確保configure
腳本使用正確的版本。如果configure
沒有沒找到Perl 5也沒關(guān)系,這并不影響Apache httpd的編譯和安裝,只是相關(guān)的支持腳本不能使用而已。apr
和apr-util
包含在Apache httpd的發(fā)行源代碼中,并且在絕大多數(shù)情況下使用都不會(huì)出現(xiàn)問題。當(dāng)然,如果apr
或apr-util
的1.0或1.1版本已經(jīng)安裝在你的系統(tǒng)中了,則必須將你的apr
/apr-util
升級到1.2版本,或者將httpd單獨(dú)分開編譯。要使用發(fā)行源代碼中自帶的apr
/apr-util
源代碼進(jìn)行安裝,你必須手動(dòng)完成:# 編譯和安裝 apr 1.2
cd srclib/apr
./configure --prefix=/usr/local/apr-httpd/
make
make install
# 編譯和安裝 apr-util 1.2
cd ../apr-util
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
make
make install
# 配置 httpd
cd ../../
./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/
由于語法、配置選項(xiàng)、安裝目錄、系統(tǒng)類型、環(huán)境變量部分與httpd的configure
完全相同,所以這些部分略過不表。
--enable-experimental-libtool
--disable-libtool-lock
--enable-debug
--enable-maintainer-mode
--enable-profile
--enable-pool-debug[=yes|no|verbose|verbose-alloc|lifetime|owner|all]
--enable-malloc-debug
--disable-lfs
--enable-nonportable-atomics
--enable-threads
--disable-threads
--disable-dso
--enable-other-child
--disable-ipv6
--with-gnu-ld
--with-pic
--with-tags[=TAGS]
--with-installbuilddir=DIR
--without-libtool
--with-efence[=DIR]
--with-sendfile
--with-egd[=DIR]
--with-devrandom[=DEV]
--with-apr=PATH
--with-ldap-include=PATH
--with-ldap-lib=PATH
--with-ldap=library
--with-dbm=DBM
--with-gdbm=PATH
--with-ndbm=PATH
--with-berkeley-db=PATH
--with-pgsql=PATH
--with-mysql=PATH
--with-sqlite3=PATH
--with-sqlite2=PATH
--with-expat=PATH
--with-iconv=PATH
Apache可以從Apache HTTP服務(wù)器下載站點(diǎn)及其鏡像站點(diǎn)下載。大多數(shù)類UNIX系統(tǒng)的Apache用戶最好的選擇是下載源代碼并編譯一個(gè)適合自己的版本,這個(gè)過程(下面將要講述)是很簡單的,它允許你根據(jù)自己的需求進(jìn)行定制。另一方面編譯好的二進(jìn)制版本通常沒有進(jìn)行及時(shí)的更新。如果你下載的是編譯好的二進(jìn)制版本,請按照其中的INSTALL.bindist
文件進(jìn)行安裝。
下載完畢后,應(yīng)該對下載來的tar包作PGP簽名校驗(yàn),以確保其完整而且未被篡改過。(PGP下載頁面)
解壓Apache httpd的tar包很簡單:
$ gzip -d httpd-NN.tar.gz
$ tar xvf httpd-NN.tar
這樣就在當(dāng)前目錄下新建了一個(gè)包含發(fā)行版源代碼的目錄,必須cd
進(jìn)入這個(gè)目錄以繼續(xù)服務(wù)器的編譯。
這一步是根據(jù)你的特定平臺和個(gè)人需求配置源代碼樹。位于發(fā)行源代碼根目錄的configure
腳本會(huì)完成這個(gè)步驟(對下載Apache CVS版源代碼的開發(fā)者,需要裝有autoconf
和libtool
,并需要執(zhí)行buildconf
,對于官方的發(fā)行版則沒這個(gè)必要)。
要想用所有的默認(rèn)值配置源代碼樹只要簡單的執(zhí)行 ./configure
命令就可以了,同時(shí)configure
還可以接受命令行參數(shù)以改變默認(rèn)值。
最重要的選項(xiàng)是Apache安裝目錄的前綴:--prefix
,因?yàn)锳pache需要知道這個(gè)目錄才能正常運(yùn)作。更多的微調(diào)選項(xiàng)請參考配置選項(xiàng)詳解。
這樣,你就可以通過在配置選項(xiàng)中指定要啟用或禁用哪些模塊來定制Apache的特性。Base組的模塊默認(rèn)包含在Apache中。其他組的模塊可以通過 --enable-module
指令啟用。其中module是模塊名去掉"mod_
"并將下劃線轉(zhuǎn)換成連字符后的字符串。你也可以使用 --enable-module=shared
指令將模塊編譯為可在運(yùn)行時(shí)加載和卸載的動(dòng)態(tài)共享對象(DSO)。同樣的,你也可以使用 --disable-module
指令禁用Base組的模塊。注意,使用這些指令的時(shí)候configure
不會(huì)對你拼寫錯(cuò)誤的模塊發(fā)出警告說找不到某某模塊,而只是簡單的忽略這個(gè)選項(xiàng)。
另外,有時(shí)候還必須提供給configure
腳本關(guān)于編譯器、庫、頭文件位置的更多信息。這些可以通過環(huán)境變量或者命令行選項(xiàng)傳遞給configure
腳本。要了解更多信息,請參考配置源代碼樹
。
為了讓你對能指定什么有一個(gè)簡單的印象,此例演示編譯Apache ,并將其安裝在/sw/pkg/apache
目錄,指定了一個(gè)特定的編譯器以及編譯參數(shù),而且允許今后將兩個(gè)附加的模塊mod_rewrite
和mod_speling
通過DSO機(jī)制在運(yùn)行時(shí)動(dòng)態(tài)加載:
$ CC="pgcc" CFLAGS="-O2" \
./configure --prefix=/sw/pkg/apache \
--enable-rewrite=shared \
--enable-speling=shared
configure
需要運(yùn)行幾分鐘,以測試指定的功能在你的系統(tǒng)中是否有效,并建立稍后編譯時(shí)所需的許多Makefile文件。
運(yùn)行以下命令你就可以編譯Apache的各個(gè)部分了:
$ make
請耐心等候,因?yàn)閷σ粋€(gè)基本配置的編譯,需要運(yùn)行幾分鐘左右,實(shí)際需要的時(shí)間會(huì)因?yàn)槟愕挠布瓦x擇的模塊數(shù)量有很大不同。
現(xiàn)在可以在PREFIX目錄(參見上述的 --prefix
參數(shù))下安裝了,執(zhí)行:
$ make install
如果是升級,安裝程序不會(huì)覆蓋你的配置文件和文檔。
接著,通過修改PREFIX/conf/
目錄下的配置文件,來配置Apache HTTP服務(wù)器。
$ vi PREFIX/conf/httpd.conf
docs/manual/下有Apache使用手冊,http://httpd.apache.org/docs/2.2/有最新的文檔,你還可以查看完整的指令索引。
現(xiàn)在,可以執(zhí)行下述命令立即啟動(dòng)你的Apache HTTP服務(wù)器:
$ PREFIX/bin/apachectl -k start
你應(yīng)該可以用http://localhost/
來請求你的第一個(gè)網(wǎng)頁了,這個(gè)網(wǎng)頁位于DocumentRoot
目錄下,通常是PREFIX/htdocs/
。隨后,可以這樣停止服務(wù)器:
$ PREFIX/bin/apachectl -k stop
升級的第一步是閱讀源代碼目錄中的發(fā)布公告(release announcement)和CHANGES
文件以尋找可能會(huì)對你的站點(diǎn)產(chǎn)生影響的變化。如果主板本號的變化(例如1.3→2.0或2.0→2.2)表明編譯時(shí)和運(yùn)行時(shí)的配置發(fā)生了重大變化,需要手動(dòng)調(diào)整,所有模塊也需要升級以兼容新版本的模塊API 。
小幅度的版本升級(例如:2.2.55→2.2.57)很容易。make install
的過程不會(huì)改寫任何已經(jīng)存在的文檔、日志、配置文件。此外,開發(fā)者也會(huì)盡量兼容上一版本的configure
選項(xiàng)、運(yùn)行時(shí)配置、模塊API 。大多數(shù)情況下,你將能夠使用與上一版本完全相同的configure
命令行和運(yùn)行時(shí)配置,而你原來的所有模塊也將正常工作。
如果你保存了上一次安裝后build
子目錄中的config.nice
文件,升級將更加平滑。這個(gè)文件精確地保存了所有對目錄樹進(jìn)行配置的configure
命令行。你只需要將config.nice
文件復(fù)制到新的源代碼目錄樹的根文件夾并進(jìn)行你希望的修改后,然后運(yùn)行下面的命令即可完成升級:
$ ./config.nice
$ make
$ make install
$ PREFIX/bin/apachectl -k graceful-stop
$ PREFIX/bin/apachectl -k start
--prefix
設(shè)置將新版本安裝在一個(gè)不同的目錄,并使用Listen
指令在一個(gè)不同的端口監(jiān)聽。經(jīng)過一段時(shí)間的測試以發(fā)現(xiàn)可能存在的問題,然后再做出最后的決定。