我安装了一些 Tomcat,其中只有一个主应用程序(除了 Manager 之类的东西)。除了更改默认 Tomcat 主页以包含重定向到应用程序之外,还有其他更好的方法吗?或者,更好的方法是,我如何映射http://domain.com:8080/app只是http://domain.com:8080而不去管其他应用程序(比如 Manager)吗?
答案1
安装应用程序作为ROOT
上下文。
可以通过以下方式实现:
- 将 war 文件部署为
ROOT.war
, - 在目录中部署展开的 war 文件
webapps/ROOT
, "/"
通过 Tomcat 管理器将应用程序部署到路径,- 添加上下文部分您的 Tomcat 配置:
<Context path="/" docBase="${catalina.home}/webapps/app"/>
答案2
我几乎总是将 Apache 放在 Tomcat 前面并通过 AJP(mod_proxy_ajp 或 mod_jk)进行连接,因为 Tomcat 在提供静态内容方面效率极低,而且正是因为您所描述的问题。此外,通过坚持前端,您可以使用重写规则保护 /manager 和任何其他应用程序。/manager 也是一个常见的攻击源,这种技术可以完全阻止外界访问它。
要创建您所描述的重定向,请创建如下重写规则:
# if the URL doesn't go to /myapp /admin /jkstatus /server-status or /awstats, redirect to /myapp
RewriteCond %{REQUEST_URI} !^/myapp
RewriteCond %{REQUEST_URI} !^/admin
RewriteCond %{REQUEST_URI} !^/jkstatus
RewriteCond %{REQUEST_URI} !^/server-status
RewriteCond %{REQUEST_URI} !^/awstats
RewriteRule .* /myapp [R,L]
我确信可以在 Tomcat 层完成类似的操作,但我倾向于保持 Tomcat 的可移植性和简单性,并在 Apache 级别创建任何类似的规则。
如果您这样做,请不要忘记 JkUnmount 或通过 proxy_ajp 排除您的静态内容,以便从 Apache 提供服务。