我刚刚设置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
之后运行它。)
答案 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所有权下不需要的一些目录 - 特别是在强化的生产环境中,即webapps
和conf
:如果您需要它们,您将需要它们部署新的webapps,例如通过tomcat的经理应用程序。但从技术上讲,tomcat并不需要写信给他们,这就是为什么我通常只在非生产系统中拥有tomcat所拥有的。
现在,这是您在原始问题中提到的不确定行为的原因吗?我真的不知道 - 无法解释。尝试将所有权更改回您想要运行tomcat的任何用户(使用上述说明 - 如果需要,在从命令行执行时使用sudo
预先使用它们)