我刚刚将Tomcat 7.0.53设置为与Mavericks一起在Macbook Air上运行,昨天看来运行良好。

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

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

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

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

jsp文件中有一行

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

当Chrome可以显示内容时,时间实际上就是当前时间,并且会正确更新为当前的分钟和秒。 但有时是404。如何解决?

更新:昨天,我确实更改了conf/server.xml并设置了端口80,并使用sudo ./catalina.sh start重新启动了Tomcat,因为端口80需要root特权,而今天,我将其更改回了端口8080,并以自己的身份启动了Tomcat。 ...一分钟前,我以root身份启动Tomcat,现在看来一切正常。 难道是由于某些文件是以root身份写入的,而普通用户无法覆盖这些文件吗? 如何使它再次“恢复正常”,以便我不能以root身份启动Tomcat? (还有一本O'Reilly的书说,我应该以nobody身份(对于8080端口)或root (对于80或8080端口)的身份启动Tomcat,但是我只是尝试了,甚至无法以nobody身份启动Tomcat,它将立即停止。因此,似乎如果我曾经以root身份运行过Tomcat,那么以后我将需要以root身份运行它。

===============>>#1 票数: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 :如果通过tomcat的manager应用程序部署新的webapp,则将需要它们。 但是从技术上讲,tomcat不需要写信给他们,这就是为什么我通常只让它们在非生产系统中由tomcat拥有。

现在,这是您在原始问题中提到的不确定行为的原因吗? 我真的不知道-无法解释。 尝试将所有权重新更改为您要以其身份运行tomcat的任何用户(使用上述说明-必要时,从命令行执行时,将它们与sudo一起使用)

  ask by nopole translate from so

未解决问题?本站智能推荐: