Apache HTTP Server 2.4 版
說明 | 在啟動或重新啟動時載入可執行碼和模組至伺服器 |
---|---|
狀態 | 擴充功能 |
模組識別碼 | so_module |
原始檔 | mod_so.c |
相容性 | 這是 Windows 上的基本模組(總是包含) |
在特定的作業系統上,此模組可用於透過 動態共用物件 (DSO) 機制將模組載入 Apache HTTP Server 中,而無需重新編譯。
在 Unix 上,載入的代碼通常來自共用物件檔(通常附檔名為 .so
),在 Windows 上,它可能是 .so
或 .dll
附檔名。
為一個主要版本的 Apache HTTP Server 所建置的模組通常無法在另一個版本中使用。(例如 1.3 與 2.0,或 2.0 與 2.2)一個主要版本與另一個版本之間通常會有 API 的變更,這表示模組需要修改才能與新版本一起執行。
在 Windows 上,可載入檔案通常具有 .dll
檔案附檔名,Apache httpd 模組稱為 mod_whatever.so
,就像在其他平台上一樣。但是,您可能會遇到第三方的模組,例如 PHP,它們會繼續使用 .dll
約定。
儘管 mod_so
仍載入具有 ApacheModuleFoo.dll
名稱的模組,但建議使用新的命名約定;如果您正在轉換 2.0 的可載入模組,請將名稱修復為此 2.0 約定。
Apache httpd 模組 API 在 Unix 和 Windows 版本之間保持不變。許多模組可以在 Windows 上執行,而不會做或僅會做少量的 Unix 變更,儘管其他模組依賴 Windows 中沒有的 Unix 架構方面,而且無法正常執行。
當某模組運作時,將會透過兩種方式之一加到伺服器中。與 Unix 相同,可將它編譯進伺服器中。由於适用于 Windows 的 Apache httpd 不具備適用於 Unix 的 Apache httpd 的 Configure
程式,因此模組的來源檔案必須加到 ApacheCore 專案檔案中,其符號也必須加到 os\win32\modules.c
檔案中。
第二種方式是將模組編譯成 DLL,一種類似於共用函式庫的函式庫,可用於在執行階段載入到伺服器中,方法是使用 LoadModule
指令。這些模組 DLL 可分散於任何 Apache httpd for Windows 安裝並執行,而不需要重新編譯伺服器。
若要建立模組 DLL,模組的來源檔需要進行微調:必須從 DLL 匯出模組記錄(稍後會建立,如下所述)。要執行此項作業,請將 AP_MODULE_DECLARE_DATA
(在 Apache httpd 標頭檔案中定義)加到模組的模組記錄定義中。例如,如果模組具有
module foo_module;
請使用以下內容取代上述內容
module AP_MODULE_DECLARE_DATA foo_module;
請注意,這只會在 Windows 上啟用,如此便可繼續在 Unix 上使用模組,而且無需變更。此外,如果您熟悉 .DEF
檔案,也可以用該方法來匯出模組記錄。
現在,建立一個包含模組的 DLL。您需要將它連結至編譯 Apache httpd 共用函式庫 libhttpd.dll 時所建立的 libhttpd.lib 匯出函式庫。您可能也需要變更編譯器設定,以確保正確找到 Apache httpd 標頭檔案。您可在伺服器根目錄的 modules 目錄中找到此函式庫。最好的方式是从結構中擷取現有的模組 .dsp 檔案,以確保建置環境正確設定,或者比較 .dsp 的編譯器和連結選項。
這應該會建立模組的 DLL 版本。現在,只要將它放在伺服器根目錄的 modules
目錄中,並使用 LoadModule
指令來載入它。