# 編譯與安裝
本文僅闡述Apache在Unix和類Unix系統中的編譯和安裝,在Windows中的編譯和安裝可以參考[在Microsoft Windows中使用Apache](#calibre_link-269)。其他平臺可以參見[針對特定平臺的說明](#calibre_link-274)文檔。
像其它許多開源項目一樣,Apache使用`libtool`和`autoconf`建立編譯環境。
如果你只進行很小的版本升級(比如2.2.54→2.2.55),請直接跳轉到下面的[升級](#calibre_link-354)部分。
## 針對心急者的概述
| [下載](#calibre_link-356) | `$ lynx http://httpd.apache.org/download.cgi` |
|:--- |:--- |
| [解壓](#calibre_link-357) | `$ gzip -d httpd-_NN_.tar.gz` `$ tar xvf httpd-_NN_.tar` `$ cd httpd-_NN_` |
| [配置](#calibre_link-358) | `$ ./configure --prefix=_PREFIX_` |
| [編譯](#calibre_link-359) | `$ make` |
| [安裝](#calibre_link-360) | `$ make install` |
| [配置](#calibre_link-361) | `$ vi _PREFIX_/conf/httpd.conf` |
| [測試](#calibre_link-362) | `$ _PREFIX_/bin/apachectl -k start` |
其中_NN_必須用當前的副版本號替代;_PREFIX_是服務器被安裝到文件系統中的路徑名,如果沒有指定_PREFIX_,默認會裝到`/usr/local/apache2`
下面從編譯和安裝Apache httpd的要求開始詳細闡述編譯和安裝的每個步驟。
## 要求
編譯Apache的要求如下:
磁盤空間
必須保證有50MB以上的自由臨時磁盤空間。Apache安裝完畢后會占據10MB左右的空間,實際的磁盤空間需求會因編譯設置和是否安裝第三方模塊而有所不同。
ANSI-C編譯器及編譯環境
必須裝有ANSI-C編譯器,推薦使用[自由軟件基金會(FSF)](http://www.gnu.org/)的[GCC](http://gcc.gnu.org/)。如果沒有GCC,那么要確保使用的編譯器符合ANSI標準,而且`PATH`中必須包含指向基本編譯工具比如`make`的路徑。
確保準確的時間
由于HTTP協議的元素都會用到時間,有必要了解一下你的系統所使用的時間同步機制。在基于網絡時間協議(NTP)的系統中,一般是用`ntpdate`或`xntpd`來同步時間。有關NTP軟件的資料請參見[NTP主頁](http://www.ntp.org)。
[Perl 5](http://www.perl.org/) [可選]
有些用Perl寫的支持腳本,如`apxs`或`dbmmanage` ,需要Perl5解釋器(5.003或以上的版本就足夠了)。如果系統中存在多個Perl解釋器,比如有系統提供的Perl 4,還有你自己安裝的Perl 5,推薦你使用 `--with-perl` 選項來確保`configure`腳本使用正確的版本。如果`configure`沒有沒找到Perl 5也沒關系,這并不影響Apache httpd的編譯和安裝,只是相關的支持腳本不能使用而已。
[apr/apr-util >= 1.2](http://apr.apache.org)
`apr`和`apr-util`包含在Apache httpd的發行源代碼中,并且在絕大多數情況下使用都不會出現問題。當然,如果`apr`或`apr-util`的1.0或1.1版本已經安裝在你的系統中了,則必須將你的`apr`/`apr-util`升級到1.2版本,或者將httpd單獨分開編譯。要使用發行源代碼中自帶的`apr`/`apr-util`源代碼進行安裝,你必須手動完成:
```
# 編譯和安裝 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/
```
## 下載
Apache可以從[Apache HTTP服務器下載站點](http://httpd.apache.org/download.cgi)及其鏡像站點下載。大多數類UNIX系統的Apache用戶最好的選擇是下載源代碼并編譯一個適合自己的版本,這個過程(下面將要講述)是很簡單的,它允許你根據自己的需求進行定制。另一方面編譯好的二進制版本通常沒有進行及時的更新。如果你下載的是編譯好的二進制版本,請按照其中的`INSTALL.bindist`文件進行安裝。
下載完畢后,應該對下載來的tar包作[PGP簽名校驗](http://httpd.apache.org/dev/verification.html),以確保其完整而且未被篡改過。([PGP下載頁面](http://httpd.apache.org/download.cgi#verify))
## 解壓
解壓Apache httpd的tar包很簡單:
```
$ gzip -d httpd-_NN_.tar.gz
$ tar xvf httpd-_NN_.tar
```
這樣就在當前目錄下新建了一個包含發行版源代碼的目錄,必須`cd`進入這個目錄以繼續服務器的編譯。
## 配置源代碼樹
這一步是根據你的特定平臺和個人需求配置源代碼樹。位于發行源代碼根目錄的`configure`腳本會完成這個步驟(對下載Apache CVS版源代碼的開發者,需要裝有`autoconf`和`libtool` ,并需要執行`buildconf` ,對于官方的發行版則沒這個必要)。
要想用所有的默認值配置源代碼樹只要簡單的執行 `./configure` 命令就可以了,同時`configure`還可以接受命令行參數以改變默認值。
最重要的選項是Apache安裝目錄的前綴:`--prefix` ,因為Apache需要知道這個目錄才能正常運作。更多的微調選項請參考[配置選項詳解](#calibre_link-364)。
這樣,你就可以通過在配置選項中指定要啟用或禁用哪些[模塊](#calibre_link-1)來定制Apache的[特性](#calibre_link-365)。[Base](#calibre_link-12)組的模塊默認包含在Apache中。其他組的模塊可以通過 `--enable-module` 指令啟用。其中module是模塊名去掉"`mod_`"并將下劃線轉換成連字符后的字符串。你也可以使用 `--enable-module=shared` 指令將模塊編譯為可在運行時加載和卸載的[動態共享對象(DSO)](#calibre_link-259)。同樣的,你也可以使用 `--disable-module` 指令禁用[Base](#calibre_link-12)組的模塊。注意,使用這些指令的時候`configure`不會對你拼寫錯誤的模塊發出警告說找不到某某模塊,而只是簡單的忽略這個選項。
另外,有時候還必須提供給`configure`腳本關于編譯器、庫、頭文件位置的更多信息。這些可以通過環境變量或者命令行選項傳遞給`configure`腳本。要了解更多信息,請參考`配置源代碼樹`。
為了讓你對能指定什么有一個簡單的印象,此例演示編譯Apache ,并將其安裝在`/sw/pkg/apache`目錄,指定了一個特定的編譯器以及編譯參數,而且允許今后將兩個附加的模塊`mod_rewrite`和`mod_speling`通過DSO機制在運行時動態加載:
```
$ CC="pgcc" CFLAGS="-O2" \
./configure --prefix=/sw/pkg/apache \
--enable-rewrite=shared \
--enable-speling=shared
```
`configure`需要運行幾分鐘,以測試指定的功能在你的系統中是否有效,并建立稍后編譯時所需的許多Makefile文件。
## 編譯
運行以下命令你就可以編譯Apache的各個部分了:
```
$ make
```
請耐心等候,因為對一個基本配置的編譯,需要運行幾分鐘左右,實際需要的時間會因為你的硬件和選擇的模塊數量有很大不同。
## 安裝
現在可以在_PREFIX_目錄(參見上述的 `--prefix` 參數)下安裝了,執行:
```
$ make install
```
如果是升級,安裝程序不會覆蓋你的配置文件和文檔。
## 配置
接著,通過修改`_PREFIX_/conf/`目錄下的[配置文件](#calibre_link-255),來配置Apache HTTP服務器。
```
$ vi _PREFIX_/conf/httpd.conf
```
[docs/manual/](#calibre_link-6)下有Apache使用手冊,[http://httpd.apache.org/docs/2.2/](http://httpd.apache.org/docs/2.2/)有最新的文檔,你還可以查看完整的[指令索引](#calibre_link-2)。
## 測試
現在,可以執行下述命令立即[啟動](#calibre_link-250)你的Apache HTTP服務器:
```
$ _PREFIX_/bin/apachectl -k start
```
你應該可以用`http://localhost/`來請求你的第一個網頁了,這個網頁位于`DocumentRoot`目錄下,通常是`_PREFIX_/htdocs/` 。隨后,可以這樣[停止](#calibre_link-31)服務器:
```
$ _PREFIX_/bin/apachectl -k stop
```
## 升級
升級的第一步是閱讀源代碼目錄中的發布公告(release announcement)和`CHANGES`文件以尋找可能會對你的站點產生影響的變化。如果主板本號的變化(例如1.3→2.0或2.0→2.2)表明編譯時和運行時的配置發生了重大變化,需要手動調整,所有模塊也需要升級以兼容新版本的模塊API 。
小幅度的版本升級(例如:2.2.55→2.2.57)很容易。`make install` 的過程不會改寫任何已經存在的文檔、日志、配置文件。此外,開發者也會盡量兼容上一版本的`configure`選項、運行時配置、模塊API 。大多數情況下,你將能夠使用與上一版本完全相同的`configure`命令行和運行時配置,而你原來的所有模塊也將正常工作。
如果你保存了上一次安裝后`build`子目錄中的`config.nice`文件,升級將更加平滑。這個文件精確地保存了所有對目錄樹進行配置的`configure`命令行。你只需要將`config.nice`文件復制到新的源代碼目錄樹的根文件夾并進行你希望的修改后,然后運行下面的命令即可完成升級:
```
$ ./config.nice
$ make
$ make install
$ _PREFIX_/bin/apachectl -k graceful-stop
$ _PREFIX_/bin/apachectl -k start
```
你應該總是在將新版本的Apache投入正式運行前,對這個新版本進行足夠的、針對你的實際運行環境的測試。比如,你可以使用一個不同的 `--prefix` 設置將新版本安裝在一個不同的目錄,并使用`Listen`指令在一個不同的端口監聽。經過一段時間的測試以發現可能存在的問題,然后再做出最后的決定。
- Apache HTTP Server Version 2.2 文檔 [最后更新:2006年3月21日]
- 版本說明
- 從1.3升級到2.0
- 從2.0升級到2.2
- Apache 2.2 新特性概述
- Apache 2.0 新特性概述
- The Apache License, Version 2.0
- 參考手冊
- 編譯與安裝
- 啟動Apache
- 停止和重啟
- 配置文件
- 配置段(容器)
- 緩沖指南
- 服務器全局配置
- 日志文件
- 從URL到文件系統的映射
- 安全方面的提示
- 動態共享對象(DSO)支持
- 內容協商
- 自定義錯誤響應
- 地址和端口的綁定(Binding)
- 多路處理模塊
- Apache的環境變量
- Apache處理器的使用
- 過濾器(Filter)
- suEXEC支持
- 性能方面的提示
- URL重寫指南
- Apache虛擬主機文檔
- 基于主機名的虛擬主機
- 基于IP地址的虛擬主機
- 大批量虛擬主機的動態配置
- 虛擬主機示例
- 深入研究虛擬主機的匹配
- 文件描述符限制
- 關于DNS和Apache
- 常見問題
- 經常問到的問題
- Apache的SSL/TLS加密
- SSL/TLS高強度加密:緒論
- SSL/TLS高強度加密:兼容性
- SSL/TLS高強度加密:如何...?
- SSL/TLS Strong Encryption: FAQ
- 如何.../指南
- 認證、授權、訪問控制
- CGI動態頁面
- 服務器端包含入門
- .htaccess文件
- 用戶網站目錄
- 針對特定平臺的說明
- 在Microsoft Windows中使用Apache
- 在Microsoft Windows上編譯Apache
- Using Apache With Novell NetWare
- Running a High-Performance Web Server on HPUX
- The Apache EBCDIC Port
- 服務器和支持程序
- httpd - Apache超文本傳輸協議服務器
- ab - Apache HTTP服務器性能測試工具
- apachectl - Apache HTTP服務器控制接口
- apxs - Apache 擴展工具
- configure - 配置源代碼樹
- dbmmanage - 管理DBM格式的用戶認證文件
- htcacheclean - 清理磁盤緩沖區
- htdbm - 操作DBM密碼數據庫
- htdigest - 管理用于摘要認證的用戶文件
- httxt2dbm - 生成RewriteMap指令使用的dbm文件
- htpasswd - 管理用于基本認證的用戶文件
- logresolve - 解析Apache日志中的IP地址為主機名
- rotatelogs - 滾動Apache日志的管道日志程序
- suexec - 在執行外部程序之前切換用戶
- 其他程序
- 雜項文檔
- 與Apache相關的標準
- Apache模塊
- 描述模塊的術語
- 描述指令的術語
- Apache核心(Core)特性
- Apache MPM 公共指令
- Apache MPM beos
- Apache MPM event
- Apache MPM netware
- Apache MPM os2
- Apache MPM prefork
- Apache MPM winnt
- Apache MPM worker
- Apache模塊 mod_actions
- Apache模塊 mod_alias
- Apache模塊 mod_asis
- Apache模塊 mod_auth_basic
- Apache模塊 mod_auth_digest
- Apache模塊 mod_authn_alias
- Apache模塊 mod_authn_anon
- Apache模塊 mod_authn_dbd
- Apache模塊 mod_authn_dbm
- Apache模塊 mod_authn_default
- Apache模塊 mod_authn_file
- Apache模塊 mod_authnz_ldap
- Apache模塊 mod_authz_dbm
- Apache模塊 mod_authz_default
- Apache模塊 mod_authz_groupfile
- Apache模塊 mod_authz_host
- Apache模塊 mod_authz_owner
- Apache模塊 mod_authz_user
- Apache模塊 mod_autoindex
- Apache模塊 mod_cache
- Apache模塊 mod_cern_meta
- Apache模塊 mod_cgi
- Apache模塊 mod_cgid
- Apache模塊 mod_charset_lite
- Apache模塊 mod_dav
- Apache模塊 mod_dav_fs
- Apache模塊 mod_dav_lock
- Apache模塊 mod_dbd
- Apache模塊 mod_deflate
- Apache模塊 mod_dir
- Apache模塊 mod_disk_cache
- Apache模塊 mod_dumpio
- Apache模塊 mod_echo
- Apache模塊 mod_env
- Apache模塊 mod_example
- Apache模塊 mod_expires
- Apache模塊 mod_ext_filter
- Apache模塊 mod_file_cache
- Apache模塊 mod_filter
- Apache模塊 mod_headers
- Apache模塊 mod_ident
- Apache模塊 mod_imagemap
- Apache模塊 mod_include
- Apache模塊 mod_info
- Apache模塊 mod_isapi
- Apache模塊 mod_ldap
- Apache模塊 mod_log_config
- Apache模塊 mod_log_forensic
- Apache模塊 mod_logio
- Apache模塊 mod_mem_cache
- Apache模塊 mod_mime
- Apache模塊 mod_mime_magic
- Apache模塊 mod_negotiation
- Apache模塊 mod_nw_ssl
- Apache模塊 mod_proxy
- Apache模塊 mod_proxy_ajp
- Apache模塊 mod_proxy_balancer
- Apache模塊 mod_proxy_connect
- Apache模塊 mod_proxy_ftp
- Apache模塊 mod_proxy_http
- Apache模塊 mod_rewrite
- Apache模塊 mod_setenvif
- Apache模塊 mod_so
- Apache模塊 mod_speling
- Apache模塊 mod_ssl
- Apache模塊 mod_status
- Apache模塊 mod_suexec
- Apache模塊 mod_unique_id
- Apache模塊 mod_userdir
- Apache模塊 mod_usertrack
- Apache模塊 mod_version
- Apache模塊 mod_vhost_alias
- Developer Documentation for Apache 2.0
- Apache 1.3 API notes
- Debugging Memory Allocation in APR
- Documenting Apache 2.0
- Apache 2.0 Hook Functions
- Converting Modules from Apache 1.3 to Apache 2.0
- Request Processing in Apache 2.0
- How filters work in Apache 2.0
- Apache 2.0 Thread Safety Issues
- 詞匯和索引
- 詞匯表
- 指令索引
- 指令速查
- 模塊索引
- 站點導航