如何将重写规则中的秘密传递给 AJP 协议

如何将重写规则中的秘密传递给 AJP 协议

我有一个运行 2.4.6 的 Apache 服务器,以及运行 lucee 的 Tomcat 8.5.33。

我们有代理到端口 8009 上的 AJP 的重写规则。

ProxyPassReverse / ajp://localhost:8009/ timeout=3600
RewriteEngine On

# Rewrite sitemap
RewriteRule ^/sitemap\.txt$ ajp://localhost:8009/sitemap/index.cfm?format=txt [P]
RewriteRule ^/sitemap\.xml$ ajp://localhost:8009/sitemap/index.cfm [P]

我需要实现这个秘密,并且能够在 server.xml 中毫无问题地进行设置,但是很难找出如何通过重写规则传递这个秘密???

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="400" requiredSecret="PasswordGoesHere!" />

有人知道我如何传递这个秘密吗?

谢谢格兰特

答案1

不幸的是,答案是:你不能,除非你升级到某个支持 mod_proxy_ajp 中的秘密标志的 Apache2 更高版本,即使那样,我也不太明白如何使用 RewriteRule 传递标志。

我有一些机器安装了 Debian 9、Apache2 2.4.25-3+deb9u9 和 Tomcat8 8.5.54-0+deb9u。Debian 错误列表中有一个缺陷(请参阅https://www.mail-archive.com/[电子邮件保护]/msg561495.html),但是由于它按预期工作,所以它被关闭了 - 他们不会将补丁反向移植到 2.4.25,因此使用 2.4.6,你肯定无法让这个组合与秘密集合一起工作。

解决该问题的唯一方法是在 Tomcat 的 server.xml 的连接器配置中设置 secretRequired="false"。

答案2

使用 mod_proxy_ajp (参见https://httpd.apache.org/docs/trunk/mod/mod_proxy_ajp.html)您只需将“?secret=XXX”添加到 ProxyPass 指令的重写路径中。我从未使用过重写规则来处理 Tomcat。

警告:?secret 0x0C 字符串自 2.4.42 起受支持

相关内容