我想使用连接器通过Apache-web服务器访问Tomcat。 我坚持以下的文档: http : //tomcat.apache.org/connectors-doc/generic_howto/quick.html我只修改它一点,以匹配我的Debian(Squeeze)系统上使用的目录结构。
所以我把以下内容添加到/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
我注释了模块的加载,因为已经发生了,我通过package-system(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。 哪里不对?
量子暗示设置日志级别debugging(谢谢)我做到了这一点,并在mod_jk.log中发现以下错误消息:'jk_map_to_storage :: mod_jk.c(3585):缺lessuri映射为176.9.9.55:/tomcat7 /”。 我GOOGLE了,发现http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html
所以在httpd.conf中设置的选项并没有在VirtualHosts中使用。 我在我的VirtualHost上添加了'JkMountCopy',并且首先获得了一个Tomcat 404(而不是httpd 404)。 这里的问题,他试图访问完全相同的URI挂载,所以在我的情况/ tomcat7。 我使用的Web应用程序的名称作为安装,一切都很好。
确保:
在server.xml端口8009上有一个AJP 1.3连接器监听:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
如果它仍然不起作用,我build议你打开debugging,看看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>
我有同样的问题。 解决scheme是将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前缀。
如果可以,请使用mod_proxy_ajp或mod_proxy_http: http : //httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html