Tomcat AJP-Connectors如何工作?


9

我想使用连接器通过Apache网络服务器访问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之后已经发生了。

我的worker.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。怎么了?


在量子提示设置日志级别以进行调试(谢谢)后,我这样做了,并在mod_jk.log中发现了以下错误消息:'jk_map_to_storage :: mod_jk.c(3585):缺少176.9.9.55:/tomcat7的uri映射/'。我用谷歌搜索并找到http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

因此,在VirtualHosts中未使用httpd.conf中设置的选项。我在VirtualHost中添加了“ JkMountCopy On”-首先获得了Tomcat 404(而不是httpd 404)。这里的问题是,他尝试访问安装的完全相同的URI,因此在我的情况下是/ tomcat7。我改用webapp的名称作为mount,对我来说一切都很好。

Answers:


4

确保:

  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>

我尝试使用斜线和不使用斜线,并且server.xml包含上述行。mod_jk.log不包含任何有趣的内容,仅包含mod_jk已初始化的消息。
Mnementh's

1
你设置JkLogLeveldebug和重新加载/重启Apache?试试这个:http://host/tomcat7/xx。发布的全部内容server.xml
量子

啊,谢谢您的日志级别提示。
Mnementh's

请查看我上面编辑的答案。
量子

1

我有同样的问题。解决方法是将更JkMount /tomcat7* worker1改为JkMount /your-servlet-app* worker1。您可以根据需要拥有任意数量JkMount

例如,添加后JkMount /manager* worker1,您将可以访问http://host/manager/html

我尝试了AJP和http后才发现了这个问题。我有以下访问日志/var/log/tomcat7/localhost_access_log.txt

10.215.22.132 - - [04/Mar/2016:13:14:39 +0800] "GET /tomcat-demo/manager/ HTTP/1.1" 404 1009
10.215.22.132 - - [04/Mar/2016:13:26:05 +0800] "GET /tomcat-demo/manager/http/ HTTP/1.1" 404 1019
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/ HTTP/1.1" 302 -
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 401 2474
10.215.22.132 - yz [04/Mar/2016:13:40:35 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 200 12405

前两个日志行是在我使用AJP时生成的。后三个是在我使用http直接访问tomcat时生成的。因此,apache会将整个URL传递给tomcat,而不是删除jkmount前缀。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.