gpt4 book ai didi

apache - 从虚拟主机的 URL 中删除 Tomcat 上下文(mod_jk、mod_rewrite)

转载 作者:行者123 更新时间:2023-11-28 21:47:11 25 4
gpt4 key购买 nike

我有一个 Tomcat 实例,其中包含许多 Web 应用程序,每个应用程序都可以通过它的/Context 访问。 Tomcat 位于 httpd(实际上是 Debian Apache2)之后,配置有虚拟主机来为每个应用程序/上下文提供服务。 Tomcat 连接是通过 mod_jk 实现的。

当我不关心从 url 中删除上下文时,这工作正常:当请求虚拟域的根时,请求被重定向到 domain.com/Context。

但是对于一个应用程序,我确实想要删除上下文。我相信这可以通过使用 mod_rewrite 并将重写的 url 传递给 mod_jk 以传递到正确的 Tomcat 上下文来完成。所以我的 Debian Apache2 站点可用文件如下所示:

NameVirtualHost *

<VirtualHost *>
ServerName domain.be

DocumentRoot /home/webapp/app/static/domain/

RewriteEngine on
RewriteRule ^/(.*)$ /Context/$1 [L,PT]
RewriteLog "/var/log/apache2/domain-rewrite.log"
RewriteLogLevel 4

JkLogFile /var/log/apache2/domain-mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /Context w1
JKMount /Context* w1
JkOptions +ForwardURICompat

ErrorLog /var/log/apache2/domain_error.log
CustomLog /var/log/apache2/domain_access.log combined
LogLevel warn

</VirtualHost>

根据文档,[PT] 标志和 +ForwardURICompat 选项应该导致将重写的 URL 传递给 jk_mod。然而,这似乎并没有发生。

URL 正在重写,但似乎 mod_jk 忽略了它:例如,对 domain.be/Context 的请求被重写为/Context/Context - 但仍作为/Context 传递给 mod_jk。

有什么想法吗?顺便说一下,我现在不能使用 mod_proxy。

谢谢

最佳答案

@Josh,我认为如果 tomcat 执行任何重定向,此解决方案将不起作用。这是典型的情况,例如在要求登录的应用程序中。当用户未通过身份验证时,应用程序将重定向到/login 之类的内容,但是 tomcat 将附加当前上下文,例如/context/login,因此最后上下文确实显示在 URL 中。

正如您在其他问题/回复中提到的,仅使用 mod-jk 和 tomcat 虚拟主机是一种选择,但您需要将应用程序部署为 ROOT.war,这可能不是那么简单。有一个解决方法,因此您的应用程序可以直接放入 tomcat webapps 文件夹中,但正如我所描述的 here服务器将至少部署该应用程序两次。

如果 RewriteRule[P] 加上 JkOptions +ForwardURICompat 可以工作,那会很棒,但事实并非如此。顺便说一句,我已经对此进行了测试并且我知道 mod_proxy 确实有效,因为我将我的网站代理到 cnn.com 并且我在我的网站 URL 下获得了他们的页面。以下是您可以看到正在使用代理的请求的日志顺便说一下:

127.0.0.1 - - [15/Dec/2011:12:56:34 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (2) forcing proxy-throughput with http://localhost/nestorurquiza-app/
127.0.0.1 - - [15/Dec/2011:12:56:34 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (1) go-ahead with proxy request proxy:http://localhost/nestorurquiza-app/ [OK]
127.0.0.1 - - [15/Dec/2011:12:56:49 --0500] [localhost/sid#1008ef278][rid#1009aaca8/initial] (2) forcing proxy-throughput with http://localhost/nestorurquiza-app/login
127.0.0.1 - - [15/Dec/2011:12:56:49 --0500] [localhost/sid#1008ef278][rid#1009aaca8/initial] (1) go-ahead with proxy request proxy:http://localhost/nestorurquiza-app/login [OK]
127.0.0.1 - - [15/Dec/2011:12:57:15 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (2) forcing proxy-throughput with http://localhost/nestorurquiza-app/j_spring_security_check
127.0.0.1 - - [15/Dec/2011:12:57:15 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (1) go-ahead with proxy request proxy:http://localhost/nestorurquiza-app/j_spring_security_check [OK]
127.0.0.1 - - [15/Dec/2011:13:08:41 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (2) forcing proxy-throughput with http://localhost/nestorurquiza-app/
127.0.0.1 - - [15/Dec/2011:13:08:41 --0500] [localhost/sid#1008ef278][rid#1009980a8/initial] (1) go-ahead with proxy request proxy:http://localhost/nestorurquiza-app/ [OK]

关于apache - 从虚拟主机的 URL 中删除 Tomcat 上下文(mod_jk、mod_rewrite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com