为什么Tomcat有时会返回JSP页面,有时候404找不到?

时间:2014-04-21 06:12:56

标签: tomcat tomcat7

我刚刚设置Tomcat 7.0.53在我的Macbook Air上运行小牛队,昨天它似乎运行良好。

但是今天,重新启动后,我会执行以下操作:

cd /usr/local/tomcat/bin
./catalina.sh start

然后http://localhost:8080/foo有时会从index.jsp返回/usr/local/tomcat/webapps/foo/index.jsp,但有时会发出404 Not Found,当我按 Cmd r 在Chrome上多次。

更重要的是,如果我修改index.jsp,Tomcat仍然会在昨天返回index.jsp的内容 - 似乎Tomcat可能正在缓存某些内容,尽管如此,有时返回404 。

jsp文件有一行

Hey, the server says, it is <%= new java.util.Date() %>

当Chrome可以显示内容时,时间实际上是当前时间,并且它将更新为当前分钟和秒。但有时它是404.如何解决这个问题?

更新:昨天,我确实更改了conf/server.xml并使用sudo ./catalina.sh start创建了端口80并重新启动了Tomcat,因为端口80需要root权限,而今天我将其更改回来移植8080并启动Tomcat作为我自己......一分钟前,我将Tomcat作为root启动,现在看起来效果很好。那么是因为某些文件被写为root并且普通用户无法覆盖这些文件?我该如何做到&#34;恢复正常&#34;再次,以便我可以不作为root启动Tomcat? (并且O&#39; Reilly的书说我应该将Tomcat作为nobody(对于端口8080)或root(对于端口80或8080)启动 - 但我只是尝试了,我甚至无法启动Tomcat为nobody - 它会立即停止。所以看起来我曾经以root运行Tomcat,我需要在root之后运行它。)

1 个答案:

答案 0 :(得分:1)

你不应该以root身份运行tomcat - 而是使用80到8080的端口转发(参见你的防火墙文档)或者在前面有一个Apache(或类似的)并在tomcat前面使用mod_jk或代理--Apache知道如何删除root权限,并且您不希望面向公众的守护程序以root身份运行:任何妥协/安全问题都会立即产生灾难性影响。

以root身份运行后,几个文件(临时文件,日志文件等)将属于root用户,您必须将所有权更改回您运行tomcat的用户。

在我自己的服务器上,我通常使用与此类似的序列(非生产,测试服务器)启动tomcat:

cd /opt/tomcat
chown -R tomcat webapps conf temp logs work
sudo -u tomcat /opt/tomcat/bin/startup.sh

由于启动脚本是以root用户身份执行的,因此root用户可以更改所有文件所属的所有权 - 以及在启动之前删除自己的权限。这里运行tomcat的用户帐户实际上称为tomcat

您在tomcat所有权下不需要的一些目录 - 特别是在强化的生产环境中,即webappsconf:如果您需要它们,您将需要它们部署新的webapps,例如通过tomcat的经理应用程序。但从技术上讲,tomcat并不需要写信给他们,这就是为什么我通常只在非生产系统中拥有tomcat所拥有的。

现在,这是您在原始问题中提到的不确定行为的原因吗?我真的不知道 - 无法解释。尝试将所有权更改回您想要运行tomcat的任何用户(使用上述说明 - 如果需要,在从命令行执行时使用sudo预先使用它们)