作者:追梦and寻梦 | 来源:互联网 | 2023-02-01 19:04
我们设置如下:
httpd <-> mod_jk (Tomcat)
httpd配置为将所有请求转发到URL/app*到mod_jk.httpd配置了HTTP错误404,500等的自定义错误页面.
如果用户输入URL, http://hostname/non-existing-page
则显示httpd的自定义404错误页面.
如果用户输入URL,http://hostname/app-blabblah
则显示Tomcat的404错误页面.在/ app托管的应用程序可以处理404错误,如果它类似于/ app/non-existentpage.但是context/app-blablah没有解析为Tomcat上的任何war文件,因此会导致Tomcat的404错误页面.
我们使用的是Tomcat的精简版,它的webapps文件夹只有app.war
.
我被要求不显示Tomcat 404错误页面,因为它揭示了应用程序托管在Tomcat上并显示Tomcat版本的事实.
如果有人能告诉我如何:
当Tomcat必须处理表示不存在的上下文的URL时,为Tomcat添加自定义404错误页面.
或者配置httpd,如果它看到Tomcat返回404错误,它会呈现自己的自定义404错误页面.
PS:我不能自由地将/ app/*指向mod_jk,因为我们有时会部署其他以app开头的战争用于调试目的 - 例如app-debug.war.
更新:我正在更改mod_jk workers.properties以仅将/ app/*转发到Tomcat.
1> fab..:
回答你的问题:
当Tomcat必须处理表示不存在的上下文的URL时,为Tomcat添加自定义404错误页面.
并尊重你的初始约束:
我不能自由地将/ app/*指向mod_jk,因为我们有时会部署其他以app开头的战争用于调试目的 - 例如app-debug.war.
最简单的解决方案是使用ROOT webapp文件夹.但是,为了使您的webapps文件夹保持最低限度,尊重您的其他条件,您不必在ROOT webapp文件夹中保留任何内容,而是保留自定义错误页面.
使用此配置,您只需添加$ CATALINA_BASE/conf/web.xml
404
/general-error.html
或者任何最适合你想要的东西.(在这里,您可以使用与app.war相同的错误自定义页面,最终用户将看不到差异).
结果是:
情况1: http://hostname/non-existing-page
将显示httpd错误自定义页面
情况2: http://hostname/app/non-existing-page
将显示应用程序app.war的错误自定义页面.($ CATALINA_BASE/conf/web.xml然后使用$ CATALINA_BASE/webapps/app/WEB-INF/web.xml)
情况3: http://hostname/app-dummy-url
将显示ROOT文件夹的Tomcat错误自定义页面.(仅使用$ CATALINA_BASE/conf/web.xml).
在编辑中,您删除了约束,现在能够:
chang(e)mod_jk workers.properties只将/ app/*转发给Tomcat.
那么在这种配置中,您将获得与您想要的替代方案相同的结果:
或者配置httpd,如果它看到Tomcat返回404错误,它会呈现自己的自定义404错误页面.
但是如果你仍然想使用你在问题中提到的调试war文件(app-debug.war),你将需要每次都修改你的httpd配置(worker.properties以及你的VirtualHosts)和/或调试这些文件中的配置.由于它似乎不适合生产环境,因此在Tomcat中仅使用包含自定义页面的文件夹ROOT似乎是IMO的最佳解决方案.