常見問題

一般

JK 的一般資訊和常見問題

我在哪裡可以獲得 JK 的協助/支援?

支援的主要機制是透過 doc 目錄中包含的 JK 文件。文件也提供於專門用於 Apache Tomcat Connectors 專案 的 Apache Tomcat 網站上。如需其他協助,最佳資源是 Tomcat 使用者討論清單。在將問題發布到清單之前,您應該先搜尋 郵件清單檔案。如果您無法在檔案中找到問題的答案,您可以將有關 JK 的問題發布到使用者清單以尋求協助。請務必包含您使用的網路伺服器版本,以及您執行的平台,並前往 這裡 以確定如何訂閱 Tomcat 郵件清單。

我找不到 JK。它在哪裡?

現在 JK 已移至 tomcat-connectors 儲存庫,JK 的原始碼和二進位檔可以從 Tomcat Connectors (mod_jk) 下載 頁面的鏡像網站下載。

JK 和 mod_jk 有什麼不同?

JK 是涵蓋網路伺服器到 Tomcat 連接器的專案。

Apache HTTP Server 支援是在 JK 上實作的,使用稱為 mod_jk 模組 的外掛程式。

Microsoft IIS 支援已在 JK 中實作,使用名為ISAPI redirector 的外掛程式。

我在哪裡可以取得更多資訊?

對於JK 1.2.x,您應該閱讀

如需更詳細的資訊,請參閱參考指南。您也可以嘗試在郵件清單中搜尋「JK」,或查看原始碼。

我應該使用哪種通訊協定 - ajp12、ajp13 或 ajp14?

ajp13 是標準。舊的 ajp12 已棄用,而 ajp14 仍處於實驗階段

此外,ajp13 也受到所有 Apache Tomcat 版本(從 Tomcat 3.2 開始)以及其他 Servlet 引擎(例如 JettyJBoss)支援。

我的網路伺服器和 Tomcat 之間有一個防火牆,它會在一段時間後中斷 ajp13 連線

ajp13 通訊協定使用持續連線,如果沒有要傳送至 Tomcat 的要求,則流量可能會為空。防火牆會中斷非活動連線,並會讓您的網路伺服器和 Tomcat 認為連線是有效的。

從 JK 1.2.0 開始,已將 socket_keepalive 屬性新增至 ajp13 設定中,您應該在工作人員操作指南workers.properties 參考中查看它。如果其他方法都無法解決問題,您可以嘗試 JkOptions +DisableReuse,但這會對效能造成重大影響。

在負載過重的情況下,即使我的 Apache HTTP Server 處理大部分負載,Tomcat 中仍有許多執行緒

在負載過重的情況下,Apache HTTP Server 會建立許多子執行緒來處理負載,這反過來會建立許多連線至 Tomcat,以轉發他們應該處理的要求。Apache HTTP Server 通常會在負載減少時終止子執行緒/執行緒。但是,如果負載仍然存在,即使只有 Apache 處理要求(例如靜態內容),子執行緒仍會保留,連同所有 ajp13 連線,即使它們不再被使用。

若要在一段時間不活動後關閉連線,您可以使用 connection_pool_timeout,如需更多資訊,請參閱workers.properties 參考

Apache HTTP 伺服器

關於 mod_jk 和 Apache HTTP 伺服器的資訊和常見問答。

每當我重新啟動 Tomcat,Apache 就會鎖定!

ajp13 協定在 Tomcat 和 Apache 之間保持一個開放的 socket。Tomcat Connectors 中存在的 mod_jk 發行版會處理網路故障。但是對於非常舊的 mod_jk 發行版,您可能也必須重新啟動 Apache。

為什麼 Apache 1.3 的下載目錄中有兩個 mod_jk.so (-eapi 和 -noeapi) 檔案?

許多版本的 Apache 使用已修改的 API,稱為擴充 API,開發用於搭配 mod_ssl 模組 使用。從 Apache 2.0 開始,沒有什麼不同了。

例如,某些最近的 Linux 發行版中存在的 Apache 1.3 包含 mod_ssl 模組。

因此,如果您有這樣的「擴充 Apache」,您需要使用 mod_jk.so-eapi

您應該只對「標準 Apache」(即沒有 mod_ssl)使用 mod_jk.so-noeapi

最好避免在 STD API Apache 上使用 EAPI 模組,或在 EAPI Apache 上使用標準 API 模組。務必始終確保 mod_jk.so 與您的 Apache 版本相符。

關於「DSO 亂碼」的訊息是什麼?

這與 Apache EAPI 有關,訊息 'mod_jk.so 亂碼 - 這可能不是 Apache 模組 DSO ?' 只是告訴您,您嘗試安裝一個 mod_jk.so DSO 模組,該模組是在使用 EAPI 的 Apache 上編譯的,例如 apache-mod_ssl 或來自 Redhat distro 6.2/7.0 的 apache,但您的系統使用具有標準 API 的標準 Apache。

關於「模組可能在 EAPI 下崩潰!」的訊息

也與 EAPI 有關,訊息 '[警告] 已載入 DSO /usr/lib/apache/mod_jk.so 使用純 Apache 1.3 API,此模組可能在 EAPI 下崩潰!(請使用 -DEAPI 重新編譯)',mod_jk.so 是在具有標準 API 的正常 Apache 下編譯的,而您嘗試在使用 EAPI 的 Apache 上安裝該模組。

APXS 在建立 mod_jk 時會收到錯誤,例如 rc=0 或 rc=255。我已嘗試建立區段中的所有步驟,現在我該怎麼辦?

APXS 是從原始碼建置 Apache 網路伺服器時建立的 Perl 腳本。如果您收到這些錯誤,而且您取得的 Apache 是二進位發行版,那麼 APXS 可能未正確設定為您的系統。您的最佳選擇是從 Apache HTTP 伺服器首頁 取得 Apache 原始碼,然後自行建置。使用下列內容進行基本建置(閱讀 Apache 文件以取得其他選項)

[user@host] ~ $ cd /usr/local/src
[user@host] ~ $ gzip -dc apache_1.3.19.tar.gz|tar xvf -
[user@host] ~ $ cd apache_1.3.19
[user@host] ~ $ ./configure --prefix=/usr/local/apache \
            --enable-module=most \
            --enable-shared=max
[user@host] ~ $ make
[user@host] ~ $ make install

注意:上述步驟假設您已下載 Apache 原始碼,並將其放置在 /usr/local/src 目錄中。

Apache 抱怨模組版本不正確

由於 Apache API 會在版本之間變更,因此任何 Apache 模組都包含用於編譯模組的 Apache API 版本。這稱為 Magic Module Number。

在啟動時,Apache 會檢查模組標頭中的版本是否與 Apache 伺服器相容。如果不相容,它將拒絕啟動並記錄錯誤。

請注意,次要版本向前相容。如果使用 Apache 2.x.y 編譯模組,則產生的二進位檔應可與任何其他版本 2.x.z 搭配使用,其中 z 大於或等於 y。如果您也需要與版本 2.x.z 相容,其中 z 小於 y,請使用設定旗標 --enable-api-compatibility。請注意,使用任何 2.x 編譯的模組永遠不會與 2.y 相容,其中 x 與 y 不同。在這種情況下,您需要重新編譯模組。

它適用於最新的 Apache 2.x 嗎?

mod_jk 可與 Apache 2.x(從 2.0 到 2.4)搭配使用。

mod_jk 功能的重要部分已在 Apache HTTP 伺服器模組 mod_proxy_ajp 和 mod_proxy_balancer 中重新實作。這些是 Apache 2.2 和 2.4 標準發行版的一部分。新模組不包含 mod_jk 的所有功能,但另一方面,您可以透過每次新的 Apache 發行版自動取得這些模組。

JNI 不適用於 Apache 1.3

JNI 工作人員已被棄用。他們可能無法正常運作。請勿使用它們。

JNI 支援需要多執行緒環境,這並非 Apache 1.3 的一般情況。您應該驗證 Apache 1.3 是否已使用執行緒支援建置,如果沒有,您可以將 pthreads 函式庫新增到您的 httpd.conf 檔案。

# Add pthread to Apache in httpd.conf
LoadModule "/usr/lib/libpthreads.so"

另外請記住,JNI 適用於多執行緒伺服器,您應該考慮升級到 Apache 2.x 以支援 JNI。

JNI 報告 JVM 無法在 Linux 下啟動

JNI 工作人員已被棄用。他們可能無法正常運作。請勿使用它們。

在 Linux 下,您應該在啟動 Apache HTTP 伺服器之前設定一些環境變數

export LD_LIBRARY_PATH=$jre/bin:$jre/bin/classic:$LD_LIBRARY_PATH

另外,某些 Linux 發行版本已啟用稱為「浮動堆疊」的 GLIBC 功能,此功能在 SMP 機器上可能無法與低於 2.4.10 的核心搭配使用。您應該透過匯出環境變數來停用浮動堆疊

export LD_ASSUME_KERNEL=2.2.5

您可能必須更新服務指令碼,例如 /etc/rc.d/init.d/httpd,才能在 Apache 伺服器啟動前設定這些環境變數。

透過組態進行建置時出現混合錯誤

組態假設您已安裝並為您的系統組態某些 GNU 工具,至少為 libtool

另外,某些系統可能已設定混合的 cc 和 gcc,這可能會讓您在嘗試將使用原生 c 編譯器建置的 Apache 與使用 gcc 建置的 jk 連結時感到困惑。

如果 make 處理程序未依預期運作,您應該使用 GNU make gmake