Apache-2.2

如何讓 Tomcat AJP 連接器正常工作?

  • March 4, 2016

我想使用連接器通過 Apache-webserver 訪問 Tomcat。我堅持使用文件: http: //tomcat.apache.org/connectors-doc/generic_howto/quick.html 我只對其進行了一些修改以匹配我的 Debian-(Squeeze)-System 上使用的目錄結構。

所以我在 /etc/apache2/httpd.conf 中添加了以下內容:

# Load mod_jk module
# Update this path to match your modules location
#LoadModule    jk_module  libexec/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule     mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile     /var/log/apache2/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount  /tomcat7/* worker1

我註釋掉了模組的載入,因為在我通過包系統(libapache2-mod-jk)安裝了 mod_jk 之後,這已經發生了。

我的workers.properties 看起來像這樣:

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

Tomcat 7 直接從 Apache 的存檔中安裝,因為它不是 Squeeze 中的包。Tomcat 7 在它自己的埠(8180,不與包系統中的 tomcat6 衝突)下執行並且可以訪問。據我了解,我現在應該看到帶有http://host/tomcat7/的 tomcat 站點。但我得到了一個 404。怎麼了?


在 quanta 提示將日誌級別設置為調試之後(謝謝),我這樣做了,並在 mod_jk.log 中發現了以下錯誤消息:‘jk_map_to_storage::mod_jk.c (3585): missing uri map for 176.9.9.55:/tomcat7 /’。我搜尋了一下,發現http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

所以在 httpd.conf 中設置的選項並沒有在 VirtualHosts 中使用。我將“JkMountCopy On”添加到我的 VirtualHost - 並首先獲得了 Tomcat 404(而不是 httpd 404)。這裡的問題是,他試圖訪問安裝的完全相同的 URI,所以在我的例子中是 /tomcat7。我改用 webapp 的名稱作為 mount,一切對我來說都很好。

確保:

  1. 你輸入一個斜杠http://host/tomcat7/,而不是 http://host/tomcat7
  2. 您有一個 AJP 1.3 連接器在埠 8009 上偵聽server.xml
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

如果還是不行,建議你打開調試看看mod_jk.log


編輯:

如果您使用:

JkMount  /tomcat7/* worker1

並通過http://host/tomcat7 訪問,我相信你會得到 Apache 404 錯誤。

您可以JkMount在所需的虛擬主機部分中指定:

<VirtualHost *:80>
   ServerName  xx
   ServerAdmin xx

   JkMount /tomcat7 worker1
   JkMount /tomcat7/* worker1
</VirtualHost>

引用自:https://serverfault.com/questions/309563