我有很多服务附加到单个域,所以我希望在 Tomcat 下提供服务,比如说,http://服务器名称/tomcat,使用 Nginx 作为 Tomcat HTTP 连接器的反向代理。
Nginx 配置非常简单:
location /tomcat {
include proxy_pass.conf;
proxy_pass http://127.0.0.1:8080;
}
如果我保持原样,Tomcat 将无法解析以 开头的请求/tomcat
,但如果我在 Nginx 中另行设置alias /;
,Tomcat 就可以正常工作,但不幸的是它无法解析其所服务的路径,因此所有 URL 都丢失了/tomcat
。
我经历过配置参考对于 Tomcat 7 我已经尝试了好几次,但是我找不到任何可以允许我配置 Tomcat 来为路径下的所有应用程序提供服务的东西/tomcat
,或者以其他方式将其添加为每个应用程序的上下文路径的前缀。
我可以手动为每个应用程序配置server.xml
一个<context/>
容器,但这只会让我感到不安。有人能告诉我我明显遗漏了什么吗?
答案1
在过去的 4-5 年里,我尝试过几次做同样的事情,尝试了很多不同的方法,但都失败了。最后,我得出结论:(a)这是不可能的(b)即使通过某种方式可以做到这一点,也不值得付出努力。不过,如果有人能解决这个问题,我会感到很惊喜。
答案2
未经测试,但最好的选择是将 Java Bridge 加载到 APACHE2/PHP 中,以便它在遇到它时运行 Java 代码。
答案3
显然,Tomcat 6 引入了一种机制来实现这一点,即在 webapp 文件夹或 .war 文件名前添加该前缀,并用井号分隔。例如:
${catalina.base}/webapps/tomcat#app1
${catalina.base}/webapps/tomcat#app2.war
...将使两者都可以通过http://localhost:8080/tomcat/app1/和http://localhost:8080/tomcat/app2/,无需任何进一步的配置。
Tomcat 中对此进行了相当隐晦的解释上下文容器参考,但看到这条有用的信息在 Tomcat 用户邮件列表上。
很遗憾,有一个问题:显然,Cocoon(最高 2.1.11)会阻塞路径包含哈希的 Web 应用程序(请参阅https://issues.apache.org/jira/browse/COCOON-2270)。
因此,当您没有在 Tomcat 中运行任何基于 Cocoon 的 Web 应用程序时,在其文件夹名称中添加“hashed”前缀似乎是一个可行的解决方案。