Apache HTTP 伺服器版本 2.4
apxs
是用來建置並安裝 Apache 超文字傳輸協定 (HTTP) 伺服器的擴充功能模組的工具。這會透過建置一個動態共用物件 (DSO) 來達成,它使用一個或多個原始碼或物件 檔案,這些檔案可以透過 LoadModule
指令,從 mod_so
在執行階段載入 Apache 伺服器。
因此,要使用這個擴充功能機制,您的平台必須支援 DSO 功能,而且您的 Apache httpd
二進位元組必須使用 mod_so
模組建置。如果不在這種情況下,apxs
工具會自動抱怨。您可以自行手動執行指令來檢查
$ httpd -l
模組 mod_so
應該是顯示列表中的一部分。如果具備這些需求,使用 DSO 機制配合這個 apxs
工具,您可以輕易透過安裝您自己的模組,來擴充 Apache 伺服器的功能
$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[在 /path/to/apache/etc/httpd.conf 中啟用 `foo` 模組]
$ apachectl restart
/path/to/apache/sbin/apachectl restart:httpd 未執行,嘗試啟動
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303):已載入模組 foo_module
/path/to/apache/sbin/apachectl restart:httpd 已啟動
$ _
檔案 引數可以是任何 C 原始碼檔案 (.c),一個物件檔案 (.o) 或甚至是函式庫檔案 (.a)。apxs
工具會自動辨識這些擴充功能,並自動使用 C 原始碼檔案進行編譯,同時僅使用物件和檔案檔案進行連結階段。但是,使用這些預先編譯的物件時,請確保其是針對位置獨立碼 (PIC) 編譯的,才能將其用於動態載入的共用物件。例如,使用 GCC 時您永遠只需要使用 -fpic
。對於其他 C 編譯器,請參閱其手冊頁面或查看 apxs
用於編譯物件檔案的旗標。
有關 Apache 中 DSO 支援的詳細資訊,請閱讀 mod_so
文件,甚至可以閱讀 src/modules/standard/mod_so.c
原始碼檔案。
apxs -g [ -S name=value ] -n modname
apxs -q [ -v ] [ -S name=value ] query ...
apxs -c [ -S name=value ] [ -o dsofile ] [ -I incdir ] [ -D name=value ] [ -L libdir ] [ -l libname ] [ -Wc,compiler-flags ] [ -Wl,linker-flags ] files ...
apxs -i [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...
apxs -e [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...
-n modname
-i
(安裝)和 -g
(範本產生)選項的模組名稱。使用此項明確指定模組名稱。選項 -g
要求這樣做,而選項 -i
則由 apxs
工具從原始碼中判斷名稱,或(作為後備)至少從檔名猜測。-q
httpd
。當呼叫時沒有 query 參數,他會列印所有已知的變數及其值。選擇性的 -v
參數會對清單輸出進行格式化。使用此項手動判斷設定,用於建置將會載入您的模組的 httpd
。例如,在您自己的 Makefiles 中使用
INC=-I`apxs -q INCLUDEDIR`
如果您需要手動存取 Apache 的 C 標頭檔。
-S name=value
-g
-n
),並在其中產生兩個檔:一個名為 mod_name.c
的範例模組原始碼檔,可用於作為建立您自己的模組的範本,或作為使用 apxs 機制的快速入門。以及對應的 Makefile
,用於更輕鬆地建置和安裝此模組。-c
-o
選項,則會從 檔案 中的第一個檔名猜測輸出檔案,因此通常預設為 mod_名稱.so
。-o dso 檔案
mod_unknown.so
。-D 名稱=值
-I incdir
-L libdir
-l libname
-Wc,編譯器旗標
libtool --mode=compile
指令。使用此選項可新增本機的編譯器特定選項。-Wl,連結器旗標
libtool --mode=link
指令。使用此選項可新增本機的連結器特定選項。-p
-i
-a
httpd.conf
設定檔中新增相應的 LoadModule
行來啟用模組,或在該行已存在時啟用該行。-A
-a
相同,但建立的 LoadModule
指令會加上一個雜湊符號 (#
),也就是說模組已準備好在稍後啟用,但最初仍處於停用狀態。-e
-a
和 -A
選項一起使用,類似於 -i
運作,用於編輯 Apache 的 httpd.conf
設定檔而不試圖安裝模組。假設您有可用名為 mod_foo.c
的 Apache 模組,可用於擴充 Apache 伺服器的功能。要執行此操作,您必須先編譯 C 來源到共享物件,適合透過下列指令在執行期間載入到 Apache 伺服器
$ apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
$ _
接著,您必須更新 Apache 組態,確保存在一個 LoadModule
指令來載入此共享物件。為簡化此步驟,apxs
提供一個自動方式來安裝共享物件到其「modules」目錄並相應地更新 httpd.conf
檔案。這可透過執行下列指令達成
$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[在 /path/to/apache/conf/httpd.conf 中啟用模組 `foo`]
$ _
這樣一個名為
LoadModule foo_module modules/mod_foo.so
的行會新增到組態檔案(如果仍不存在)。如果您想預設停用它,請使用 -A
選項,即
$ apxs -i -A mod_foo.c
要快速測試 apxs 機制,您可以透過下列方式建立一個範例 Apache 模組範本和對應的 Makefile
$ apxs -g -n foo
建立中 [DIR] foo
建立中 [FILE] foo/Makefile
建立中 [FILE] foo/modules.mk
建立中 [FILE] foo/mod_foo.c
建立中 [FILE] foo/.deps
$ _
接著,您可以立即編譯此範例模組到共享物件,並將它載入到 Apache 伺服器
$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
apxs -i -a -n "foo" mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[在 /path/to/apache/conf/httpd.conf 中啟用模組 `foo`]
apachectl restart
/path/to/apache/sbin/apachectl restart:httpd 未執行,嘗試啟動
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303):已載入模組 foo_module
/path/to/apache/sbin/apachectl restart:httpd 已啟動
$ _