Tomcat与虚拟主机 – 404

我有一台安装了Apache 2.2.3和Tomcat 5.5.27的CentOS 5.2服务器。 服务器托pipe连接到多个Tomcat的多个虚拟主机。 比如我们有一个用于开发和testing的tomcat,一个用于生产的tomcat。 project.demo.us.com指向dev tomcat和project.us.com指向生产tomcat。

这是虚拟主机的configuration:

<VirtualHost *:80> ServerName project.demo.us.com CustomLog logs/project.demo.us.com/access_log combined env=!VLOG ErrorLog logs/project.demo.us.com/error_log DocumentRoot /var/www/vhosts/project.demo.us.com <Directory /var/www/vhosts/project.demo.us.com> Allow from all AllowOverride All Options -Indexes FollowSymLinks </Directory> ########## ########## ########## JkMount /project/* online </VirtualHost> 

JkMount行定义我们使用在线工人和我们的workers.properties包含这个:

 worker.list=..., online, ... worker.online.port=7703 worker.online.host=localhost worker.online.type=ajp13 worker.online.lbfactor=1 

而tomcat的conf / server.xml包含:

  <Connector port="7703" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" maxThreads="80" minSpareThreads="10" maxSpareThreads="15"/> 

我不知道什么redirectPort是,但我试图telnet到该端口,没有人回答,所以它应该没有关系?

Tomcat的webapps目录包含project.war,服务器自动将其部署在包含index.jsp和hello.html的项目目录下。 后者用于静态debugging目的。

现在,当我尝试访问http://project.demo.us.com/project/index.jsp时 ,我得到了Tomcat的HTTP状态404 – 请求的资源()不可用。 hello.html发生同样的事情,所以它不能与静态内容一起工作。

Apache的access_log包含:

88.112.152.31 – – [10 / Aug / 2009:12:15:14 +0300]“GET /demo/index.jsp HTTP / 1.1”404 952“ – ”“Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.2)Gecko / 20090729 Firefox / 3.5.2“

我在Tomcat的日志中找不到任何提及的请求。

如果我closures这个特定的tomcat,我不再得到Tomcat的404,但是Apache的503服务暂时不可用,所以我应该configuration正确的Tomcat。

有什么明显的,我失踪? 有什么地方可以找出Tomcat使用什么path查找请求的文件?

它闻起来可能是在它进入你的虚拟主机定义之前,它正在运行到一个mod_rewrite或别名。 您发布的所有内容看起来都是正确的,但您可以尝试添加一些其他选项:

 JkWorkersFile /explicit/path/to/workers.properties JkLogFile /var/log/mod_jk.log JkLogLevel debug 

第一个设置将确保您使用的是您认为自己的实际属性文件,也许在您的多Tomcat环境中加载了错误的文件。 你也可以检查这个特定的实例的TOMCAT_HOME,以确保它正在加载正确的server.xml; 你可以使用-configparameter passing给$ TOMCAT_HOME:

 cd $TOMCAT_HOME ./bin/startup.sh -config /direct/path/to/server.xml 

看看你在哪里…

如果您增加JK模块中的日志logging,则应该看到将请求转换为什么内容。 如果直接连接到Tomcat,并查看pipe理器,那么在那里列出的目标应用程序? 如果是这样,它是否有相同的path映射正在使用? 如果您使用Tomcat的http侦听器,应用程序是否工作?

虽然没有严格回答你的问题,但有mod_proxy_ajp这可以很快完成这个,并在与该版本的CentOS一起发行的香草apache版本支持

 <VirtualHost *:80> ServerName project.demo.us.com TransferLog /my/log/dir/access.log ErrorLog /my/log/dir/error.log ProxyPass /project ajp://locahost:7703/context/ # Default port is 8009 DocumentRoot /my/doc/root/ <VirtualHost> <VirtualHost *:80> ServerName production.demo.us.com TransferLog /my/log/dir/access.log ErrorLog /my/log/dir/error.log ProxyPass /project ajp://locahost:7703/context/ # Default port is 8009 DocumentRoot /my/doc/root/ <VirtualHost> 

mod_jk和虚拟主机有几个问题,一个是挂载通常是全局的。 使用mod_proxy_ajp帮助删除这些。 它也是一个更容易维护地狱。