如何让 Tomcat AJP-Connectors 工作?

Mne*_*nth 10 tomcat ajp apache-2.2

我想使用连接器通过 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
Run Code Online (Sandbox Code Playgroud)

我注释掉了模块的加载,因为在我通过包系统(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
Run Code Online (Sandbox Code Playgroud)

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 ,一切对我来说都很好。

qua*_*nta 5

确保:

  1. 你输入一个斜杠http://host/tomcat7 /,而不是 http://host/tomcat7
  2. 你有一个 AJP 1.3 连接器在端口 8009 上监听server.xml

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
    Run Code Online (Sandbox Code Playgroud)

如果还是不行,建议你打开调试看看mod_jk.log


编辑:

如果您使用:

JkMount  /tomcat7/* worker1
Run Code Online (Sandbox Code Playgroud)

并通过http://host/tomcat7 访问,我确定您会收到 Apache 404 错误。

您可以JkMount在 Virtual Host 部分中指定您想要的:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)